diff --git a/lucene/pom.xml b/lucene/pom.xml
new file mode 100644
index 0000000000..42b81a7d4a
--- /dev/null
+++ b/lucene/pom.xml
@@ -0,0 +1,37 @@
+
+ 4.0.0
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
+ lucene
+ 0.0.1-SNAPSHOT
+ lucene
+ An Apache Lucene demo application
+
+
+
+
+ org.apache.lucene
+ lucene-core
+ 7.1.0
+
+
+
+ org.apache.lucene
+ lucene-queryparser
+ 7.1.0
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
\ No newline at end of file
diff --git a/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java b/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java
new file mode 100644
index 0000000000..40a35fad86
--- /dev/null
+++ b/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java
@@ -0,0 +1,78 @@
+package com.baeldung.lucene;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.document.TextField;
+import org.apache.lucene.index.DirectoryReader;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.queryparser.classic.ParseException;
+import org.apache.lucene.queryparser.classic.QueryParser;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.TopDocs;
+import org.apache.lucene.store.Directory;
+
+public class InMemoryLuceneIndex {
+
+ private Directory memoryIndex;
+ private StandardAnalyzer analyzer;
+
+ public InMemoryLuceneIndex(Directory memoryIndex, StandardAnalyzer analyzer) {
+ super();
+ this.memoryIndex = memoryIndex;
+ this.analyzer = analyzer;
+ }
+
+ /**
+ *
+ * @param title
+ * @param body
+ */
+ public void indexDocument(String title, String body) {
+
+ IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
+ try {
+ IndexWriter writter = new IndexWriter(memoryIndex, indexWriterConfig);
+ Document document = new Document();
+
+ document.add(new TextField("title", title, Field.Store.YES));
+ document.add(new TextField("body", body, Field.Store.YES));
+
+ writter.addDocument(document);
+ writter.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public List searchIndex(String inField, String queryString) {
+ try {
+ Query query = new QueryParser(inField, analyzer).parse(queryString);
+
+ IndexReader indexReader = DirectoryReader.open(memoryIndex);
+ IndexSearcher searcher = new IndexSearcher(indexReader);
+ TopDocs topDocs = searcher.search(query, 10);
+ List documents = new ArrayList<>();
+ for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
+ documents.add(searcher.doc(scoreDoc.doc));
+ }
+
+ return documents;
+ } catch (IOException | ParseException e) {
+ e.printStackTrace();
+ }
+ return null;
+
+ }
+
+}
+
+
diff --git a/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java b/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java
new file mode 100644
index 0000000000..c3a498a4b8
--- /dev/null
+++ b/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java
@@ -0,0 +1,23 @@
+package com.baeldung.lucene;
+
+import java.util.List;
+
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.store.RAMDirectory;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class LuceneInMemorySearchTest {
+
+ @Test
+ public void givenSearchQueryWhenFetchedDocumentThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("Hello world", "Some hello world ");
+
+ List documents = inMemoryLuceneIndex.searchIndex("body", "world");
+
+ Assert.assertEquals("Hello world", documents.get(0).get("title"));
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index b9186f9304..20f7c4ffad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -261,6 +261,7 @@
saas
deeplearning4j
spring-boot-admin
+ lucene