diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/search/SearchService.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/search/SearchService.java index af7d15f48e..c47d9a5df5 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/search/SearchService.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/search/SearchService.java @@ -198,6 +198,7 @@ public class SearchService { */ void indexDocs(final IndexWriter writer, Collection notes) throws IOException { for (Note note : notes) { + indexDoc(writer, note.getId(), note.getName()); for (Paragraph doc : note.getParagraphs()) { if (doc.getText() == null) { LOG.info("Skipping empty paragraph"); @@ -209,6 +210,15 @@ public class SearchService { writer.commit(); } + /** + * Indexes a notebook name + * @throws IOException + */ + private void indexDoc(IndexWriter w, String noteId, String noteName) throws IOException { + Document doc = newDocument(noteId, noteName); + w.addDocument(doc); + } + /** * Indexes a single paragraph = document */ @@ -232,6 +242,20 @@ public class SearchService { return doc; } + //TODO(bzz): refactor and re-use code from above + private Document newDocument(String noteId, String noteName) { + Document doc = new Document(); + + Field pathField = new StringField(ID_FIELD, noteId, Field.Store.YES); + doc.add(pathField); + + doc.add(new StringField("title", noteName, Field.Store.YES)); + + //doc.add(new LongField("modified", date.getTime(), Field.Store.NO)); + doc.add(new TextField(SEARCH_FIELD, noteName, Field.Store.YES)); + return doc; + } + /** * ID looks like '/paragraph/' * diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/search/SearchServiceTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/search/SearchServiceTest.java index d6c5cc2f36..bfa6108497 100644 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/search/SearchServiceTest.java +++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/search/SearchServiceTest.java @@ -47,6 +47,22 @@ public class SearchServiceTest { String.format("%s/paragraph/%s", note2.getId(), note2.getLastParagraph().getId())); } + @Test public void canIndexAndQueryByNotebookName() { + //given + Note note1 = newNoteWithParapgraph("Notebook1", "test"); + Note note2 = newNoteWithParapgraphs("Notebook2", "not test", "not test at all"); + notebookIndex.index(Arrays.asList(note1, note2)); + + //when + List> results = notebookIndex.search("Notebook1"); + + //then + assertThat(results).isNotEmpty(); + assertThat(results.size()).isEqualTo(1); + assertThat(results.get(0)).containsEntry("id", note1.getId()); + } + + @Test //(expected=IllegalStateException.class) public void canNotSearchBeforeIndexing() { //given no notebookIndex.index() was made