Я использую эластичный поиск spring-data, и мне нужно было бы определить SearchQuery для поиска topi c в нескольких полях и фильтровать их, сохраняя только те, которые включают хотя бы одну из указанных областей (то же, что и теги) .
В настоящее время я могу выполнять поиск по различным полям, но не могу фильтровать по областям / тегам. Я пробовал использовать BoolQueryBuilder и FilterBuilder, но не могу заставить их работать. Это отрывок из моего метода:
private SearchQuery defineSearch(String topic, List<String> areas) {
MultiMatchQueryBuilder multiMatchQueryBuilder = new MultiMatchQueryBuilder(topic)
.operator(Operator.OR)
.minimumShouldMatch("50%")
.fuzziness(Fuzziness.ONE)
.prefixLength(1)
.type(MultiMatchQueryBuilder.Type.MOST_FIELDS);
BoolQueryBuilder searchQuery = boolQuery()
.must(multiMatchQueryBuilder);
// if (!areas.isEmpty()) {
// BoolQueryBuilder valuesFilter = boolQuery();
//
// for (String value : areas) {
// QueryBuilder valueFilter = QueryBuilders.termQuery("areas", value);
// valuesFilter.must(valueFilter);
// }
// searchQuery.must(valuesFilter);
// }
return new NativeSearchQueryBuilder()
.withQuery(searchQuery)
.withFilter(boolQuery().must(termQuery("areas", areas)))
.build();
}
Не могли бы вы помочь мне?
Заранее спасибо!