Pull request #14: RED-2175

Merge in RED/search-service from RED-2175 to master

* commit '0ebe18cdfef45d514f5fe6751e978e424faba4fd':
  RED-2175 Bugfix for should query (use matchQuery() instead of termQuery()) and extended unit tests for index creation tests
  Use platform-docker-dependency version 1.1.0 which contains bugfix for Windows systems
This commit is contained in:
Philipp Schramm 2021-10-11 16:26:49 +02:00 committed by Dominique Eiflaender
commit 3d85456b31
3 changed files with 231 additions and 9 deletions

View File

@ -5,7 +5,7 @@
<parent>
<groupId>com.iqser.red</groupId>
<artifactId>platform-docker-dependency</artifactId>
<version>1.0.0</version>
<version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -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);

View File

@ -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();
}
}