Pull request #34: RED-2896 Added validations and use default values for pagination if params are invalid
Merge in RED/search-service from RED-2896 to master * commit '655b504848f58cbb860a194fd2b22c5048139fe4': RED-2896 Added validations and use default values for pagination if params are invalid
This commit is contained in:
commit
3e121e9e06
@ -55,8 +55,8 @@ public class SearchService {
|
||||
Query query = QueryStringConverter.convert(queryString);
|
||||
|
||||
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(convertQuery(query, dossierTemplateIds, dossierIds, fileId, assignee, workflowStatus, fileAttributes, returnSections))
|
||||
.from(page * pageSize)
|
||||
.size(pageSize)
|
||||
.from(getPageOrDefault(page) * getPageSizeOrDefault(pageSize))
|
||||
.size(getPageSizeOrDefault(pageSize))
|
||||
.fetchSource(new String[]{"dossierId", "fileId"}, new String[]{"sections"})
|
||||
.highlighter(new HighlightBuilder().field("sections.text").field("filename").field("fileAttributes.value").highlighterType("fvh"))//
|
||||
.trackScores(true);
|
||||
@ -122,7 +122,9 @@ public class SearchService {
|
||||
var dossierTemplateIdQueryBuilder = QueryBuilders.boolQuery();
|
||||
|
||||
for (var dossierTemplateId : dossierTemplateIds) {
|
||||
dossierTemplateIdQueryBuilder = dossierTemplateIdQueryBuilder.should(QueryBuilders.matchQuery("dossierTemplateId", dossierTemplateId));
|
||||
if (StringUtils.isNotEmpty(dossierTemplateId)) {
|
||||
dossierTemplateIdQueryBuilder = dossierTemplateIdQueryBuilder.should(QueryBuilders.matchQuery("dossierTemplateId", dossierTemplateId));
|
||||
}
|
||||
}
|
||||
|
||||
filterQuery.must(dossierTemplateIdQueryBuilder);
|
||||
@ -133,13 +135,14 @@ public class SearchService {
|
||||
var dossierIdQueryBuilder = QueryBuilders.boolQuery();
|
||||
|
||||
for (var dossierId : dossierIds) {
|
||||
dossierIdQueryBuilder = dossierIdQueryBuilder.should(QueryBuilders.matchQuery("dossierId", dossierId));
|
||||
if (StringUtils.isNotEmpty(dossierId)) {
|
||||
dossierIdQueryBuilder = dossierIdQueryBuilder.should(QueryBuilders.matchQuery("dossierId", dossierId));
|
||||
}
|
||||
}
|
||||
|
||||
filterQuery.must(dossierIdQueryBuilder);
|
||||
}
|
||||
|
||||
|
||||
if (StringUtils.isNotEmpty(fileId)) {
|
||||
filterQuery.must(QueryBuilders.matchQuery("fileId", fileId));
|
||||
}
|
||||
@ -156,10 +159,11 @@ public class SearchService {
|
||||
var fileAttributesQueryBuilder = QueryBuilders.boolQuery();
|
||||
|
||||
for (var fileAttributeKey : fileAttributes.keySet()) {
|
||||
|
||||
fileAttributesQueryBuilder.filter(QueryBuilders.boolQuery()
|
||||
.must(QueryBuilders.matchQuery("fileAttributes.name", fileAttributeKey))
|
||||
.must(QueryBuilders.matchQuery("fileAttributes.value", fileAttributes.get(fileAttributeKey))));
|
||||
if (StringUtils.isNotEmpty(fileAttributeKey)) {
|
||||
fileAttributesQueryBuilder.filter(QueryBuilders.boolQuery()
|
||||
.must(QueryBuilders.matchQuery("fileAttributes.name", fileAttributeKey))
|
||||
.must(QueryBuilders.matchQuery("fileAttributes.value", fileAttributes.get(fileAttributeKey))));
|
||||
}
|
||||
}
|
||||
|
||||
filterQuery.must(fileAttributesQueryBuilder);
|
||||
@ -230,4 +234,21 @@ public class SearchService {
|
||||
.build();
|
||||
}
|
||||
|
||||
private int getPageSizeOrDefault(int pageSize) {
|
||||
|
||||
if (pageSize <= 0) {
|
||||
return 10;
|
||||
}
|
||||
return pageSize;
|
||||
}
|
||||
|
||||
|
||||
private int getPageOrDefault(int page) {
|
||||
|
||||
if (page < 0) {
|
||||
return 0;
|
||||
}
|
||||
return page;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.iqser.red.service.search.v1.server.utils;
|
||||
|
||||
import com.iqser.red.service.search.v1.server.model.Query;
|
||||
import io.micrometer.core.instrument.util.StringUtils;
|
||||
import lombok.experimental.UtilityClass;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -15,23 +16,26 @@ public class QueryStringConverter {
|
||||
boolean inQuots = false;
|
||||
List<String> musts = new ArrayList<>();
|
||||
List<String> shoulds = new ArrayList<>();
|
||||
char[] trimmedQuery = queryString.trim().toCharArray();
|
||||
for (int i = 0; i < trimmedQuery.length; i++) {
|
||||
|
||||
if (trimmedQuery[i] == '"' && !inQuots) {
|
||||
inQuots = true;
|
||||
} else if (trimmedQuery[i] == '"' && inQuots) {
|
||||
musts.add(sb.toString().trim());
|
||||
sb = new StringBuilder();
|
||||
inQuots = false;
|
||||
} else if (trimmedQuery[i] == ' ' && !inQuots && !sb.toString().isEmpty()) {
|
||||
shoulds.add(sb.toString().trim());
|
||||
sb = new StringBuilder();
|
||||
} else if (i == trimmedQuery.length - 1) {
|
||||
sb.append(trimmedQuery[i]);
|
||||
shoulds.add(sb.toString().trim());
|
||||
} else {
|
||||
sb.append(trimmedQuery[i]);
|
||||
if (StringUtils.isNotEmpty(queryString)) {
|
||||
char[] trimmedQuery = queryString.trim().toCharArray();
|
||||
for (int i = 0; i < trimmedQuery.length; i++) {
|
||||
|
||||
if (trimmedQuery[i] == '"' && !inQuots) {
|
||||
inQuots = true;
|
||||
} else if (trimmedQuery[i] == '"' && inQuots) {
|
||||
musts.add(sb.toString().trim());
|
||||
sb = new StringBuilder();
|
||||
inQuots = false;
|
||||
} else if (trimmedQuery[i] == ' ' && !inQuots && !sb.toString().isEmpty()) {
|
||||
shoulds.add(sb.toString().trim());
|
||||
sb = new StringBuilder();
|
||||
} else if (i == trimmedQuery.length - 1) {
|
||||
sb.append(trimmedQuery[i]);
|
||||
shoulds.add(sb.toString().trim());
|
||||
} else {
|
||||
sb.append(trimmedQuery[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -24,7 +24,6 @@ import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@Ignore
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = {AbstractElasticsearchIntegrationTest.WAIT_FOR_WRITE_REQUESTS})
|
||||
public class IndexCreatorTest extends AbstractElasticsearchIntegrationTest {
|
||||
@ -88,7 +87,7 @@ public class IndexCreatorTest extends AbstractElasticsearchIntegrationTest {
|
||||
assertThat(result.getMatchedDocuments().size()).isEqualTo(0);
|
||||
|
||||
// Act & Assert 2
|
||||
result = searchService.search("S-Metolachlor", null, null, null, null, WorkflowStatus.NEW.name(), null, 0, 10, false);
|
||||
result = searchService.search("S-Metolachlor", null, null, null, null, WorkflowStatus.NEW.name(), null, -1, 0, false);
|
||||
assertThat(result.getMatchedDocuments().size()).isEqualTo(2);
|
||||
assertThat(result.getMatchedDocuments().stream().map(MatchedDocument::getFileId)).contains("fileId1");
|
||||
assertThat(result.getMatchedDocuments().stream().map(MatchedDocument::getFileId)).contains("fileId2");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user