diff --git a/search-service-image-v1/pom.xml b/search-service-image-v1/pom.xml
index 6999996..41d680e 100644
--- a/search-service-image-v1/pom.xml
+++ b/search-service-image-v1/pom.xml
@@ -5,7 +5,7 @@
com.iqser.red
platform-docker-dependency
- 1.0.0
+ 1.1.0
4.0.0
diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/SearchService.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/SearchService.java
index a6db104..051a748 100644
--- a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/SearchService.java
+++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/SearchService.java
@@ -86,9 +86,9 @@ public class SearchService {
sectionsQueries.should(textPhraseQuery);
}
for (String should : query.getShoulds()) {
- QueryBuilder textTermQuery = QueryBuilders.termQuery("sections.text", should.toLowerCase(Locale.ROOT))
+ QueryBuilder textTermQuery = QueryBuilders.matchQuery("sections.text", should.toLowerCase(Locale.ROOT))
.queryName(should);
- QueryBuilder filenameTermQuery = QueryBuilders.termQuery("filename", should.toLowerCase(Locale.ROOT))
+ QueryBuilder filenameTermQuery = QueryBuilders.matchQuery("filename", should.toLowerCase(Locale.ROOT))
.queryName("filename." + should);
entireQuery.should(textTermQuery);
entireQuery.should(filenameTermQuery);
diff --git a/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/IndexCreatorTest.java b/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/IndexCreatorTest.java
index 06edb23..756c1be 100644
--- a/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/IndexCreatorTest.java
+++ b/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/IndexCreatorTest.java
@@ -42,37 +42,259 @@ public class IndexCreatorTest extends AbstractElasticsearchIntegrationTest {
@MockBean
private FileStatusProcessingUpdateClient fileStatusProcessingUpdateClient;
-
+ /*
+ * Index two documents and delete one
+ */
@Test
- public void test() throws IOException {
-
+ public void testTwoDocumentsAndDeleteOne() throws IOException {
+ // Arrange
ClassPathResource textResource = new ClassPathResource("files/Text.json");
Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
ClassPathResource textResource2 = new ClassPathResource("files/Text2.json");
Text text2 = objectMapper.readValue(textResource2.getInputStream(), Text.class);
- documentIndexService.indexDocument("template1", "dossierId", "fileId", "Single Study - Oral (Gavage) Mouse.pdf", text);
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", "Single Study - Oral (Gavage) Mouse.pdf", text);
documentIndexService.indexDocument("template2", "dossierId2", "fileId2", "S-Metolachlor_RAR_01_Volume_1_2018-09-06.pdf", text2);
+ // Act & Assert 1
SearchResult result = searchService.search("hans klaus single", null, null, null, 1, 10, true);
assertThat(result.getMatchedDocuments().size()).isEqualTo(2);
- documentDeleteService.deleteDocument("fileId");
+ // Act
+ documentDeleteService.deleteDocument("fileId1");
- result = searchService.search("hans klaus single", null, Arrays.asList("dossierId", "dossierId2"), null, 1, 10, true);
+ // Act & Assert 2
+ result = searchService.search("hans klaus single", null, Arrays.asList("dossierId1", "dossierId2"), null, 1, 10, true);
assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ // Act & Assert 3
result = searchService.search("hans klaus single", null, Arrays.asList("dossierId3", "dossierId4"), null, 1, 10, true);
assertThat(result.getMatchedDocuments().size()).isEqualTo(0);
+ // Act & Assert 4
result = searchService.search("hans klaus single", Arrays.asList("template1", "template2"), null, null, 1, 10, true);
assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
}
+ /*
+ * SearchService will not find any result
+ */
+ @Test
+ public void testWithoutResult() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-skywalker-42.pdf";
+ String searchString = "szedhsegkekhglghserlkghrsdvkerxyfdbvkrdjgh";
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isEqualTo(0);
+ }
+
+
+ /*
+ * Filename contains hyphen and searchString contains complete filename
+ */
+ @Test
+ public void testFilenameWithHyphenWholeFilenameSearch() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-skywalker-42.pdf";
+ String searchString = fileName;
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains(searchString)).isTrue();
+ }
+
+ /*
+ * Filename contains hyphen and searchString is like complete filename
+ */
+ @Test
+ public void testFilenameWithHyphenLikeFilenameSearch() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-skywalker-42.pdf";
+ String searchString = "luke-skiwalker-42.pdf";
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains(searchString)).isTrue();
+ }
+
+ /*
+ * Filename contains hyphen & blank and searchString contains complete filename
+ */
+ @Test
+ public void testFilenameWithHyphenAndBlankContainsFilenameSearch() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-blankwalker 42.pdf";
+ String searchString = fileName;
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains("luke-blankwalker")).isTrue();
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains("42.pdf")).isTrue();
+ }
+
+ /*
+ * Filename contains hyphen and searchString contains one word from filename
+ */
+ @Test
+ public void testFilenameWithHyphenOneWordSearch() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-skywalker-42.pdf";
+ String searchString = "luke";
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains(searchString)).isTrue();
+ }
+
+ /*
+ * Filename contains hyphen and searchString contains filename without file ending
+ */
+ @Test
+ public void testFilenameWithHyphenWithoutFileEnding() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-skywalker-42.pdf";
+ String searchString = "luke-skywalker-42";
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains(searchString)).isTrue();
+ }
+
+ /*
+ * Filename contains hyphen and searchString contains complete filename within quotes
+ */
+ @Test
+ public void testFilenameWithHyphenWholeFilenameSearchWithQuotes() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-skywalker-42.pdf";
+ String matchedString = fileName;
+ String searchString = "\"" + matchedString + "\"";
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains(matchedString)).isTrue();
+ }
+
+ /*
+ * Filename contains hyphen and searchString contains part of filename within quotes
+ */
+ @Test
+ public void testFilenameWithHyphenOneWordSearchWithQuotes() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-skywalker-42.pdf";
+ String matchedString = "luke";
+ String searchString = "\"" + matchedString + "\"";
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains(matchedString)).isTrue();
+ }
+
+ /*
+ * Filename contains hyphen and searchString contains filename without file ending within quotes
+ */
+ @Test
+ public void testFilenameWithHyphenWithoutFileEndingWithQuotes() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-skywalker-42.pdf";
+ String matchedString = "luke-skywalker-42";
+ String searchString = "\"luke-skywalker-42\"";
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains(matchedString)).isTrue();
+ }
+
+ /*
+ * Filename contains hyphen & blank and searchString contains complete filename within quotes
+ */
+ @Test
+ public void testFilenameWithHyphenAndBlankWholeFilenameSearchWithQuotes() throws IOException {
+ // Arrange
+ ClassPathResource textResource = new ClassPathResource("files/Text.json");
+ Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
+ String fileName = "luke-blankwalker 42.pdf";
+ String matchedString = fileName;
+ String searchString = "\"" + matchedString + "\"";
+ documentIndexService.indexDocument("template1", "dossierId1", "fileId1", fileName, text);
+
+ // Act
+ SearchResult result = searchService.search(searchString, null, Arrays.asList("dossierId1"), null, 1, 10, true);
+
+ // Assert
+ assertThat(result.getMatchedDocuments().size()).isEqualTo(1);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().size()).isGreaterThan(0);
+ assertThat(result.getMatchedDocuments().get(0).getMatchedTerms().contains(matchedString)).isTrue();
+ }
+
}