From fab1932e7b95f4f2341bb3df5110b555cf6c7305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Mon, 18 Oct 2021 11:37:13 +0200 Subject: [PATCH] RED-2472: Fixed wrong usage of filter query that leads to false positives --- .../search/v1/server/service/SearchService.java | 11 +++++++---- .../search/v1/server/service/IndexCreatorTest.java | 7 +++---- 2 files changed, 10 insertions(+), 8 deletions(-) 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 a5516a3..4005697 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 @@ -103,6 +103,9 @@ public class SearchService { entireQuery.should(nestedQuery); } + + BoolQueryBuilder filterQuery = QueryBuilders.boolQuery(); + if (dossierTemplateIds != null && !dossierTemplateIds.isEmpty()) { var dossierTemplateIdQueryBuilder = QueryBuilders.boolQuery(); @@ -111,7 +114,7 @@ public class SearchService { dossierTemplateIdQueryBuilder = dossierTemplateIdQueryBuilder.should(QueryBuilders.matchQuery("dossierTemplateId", dossierTemplateId)); } - entireQuery.filter(dossierTemplateIdQueryBuilder); + filterQuery.must(dossierTemplateIdQueryBuilder); } if (dossierIds != null && !dossierIds.isEmpty()) { @@ -122,15 +125,15 @@ public class SearchService { dossierIdQueryBuilder = dossierIdQueryBuilder.should(QueryBuilders.matchQuery("dossierId", dossierId)); } - entireQuery.filter(dossierIdQueryBuilder); + filterQuery.must(dossierIdQueryBuilder); } if (fileId != null) { - entireQuery.filter(QueryBuilders.matchQuery("fileId", fileId)); + filterQuery.must(QueryBuilders.matchQuery("fileId", fileId)); } - return entireQuery; + return QueryBuilders.boolQuery().filter(filterQuery).must(entireQuery); } 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 59a6ba1..5412a1e 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 @@ -59,9 +59,9 @@ public class IndexCreatorTest extends AbstractElasticsearchIntegrationTest { 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); + SearchResult result = searchService.search("S-Metolachlor", null, Arrays.asList("dossierId1", "dossierId2"), null, 1, 10, false); - assertThat(result.getMatchedDocuments().size()).isEqualTo(2); + assertThat(result.getMatchedDocuments().size()).isEqualTo(1); // Act documentDeleteService.deleteDocument("fileId1"); @@ -100,8 +100,7 @@ public class IndexCreatorTest extends AbstractElasticsearchIntegrationTest { 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); + assertThat(result.getMatchedDocuments().size()).isEqualTo(0); }