Spring Boot и spring-data-elasticsearch - фильтр SearchQuery, включающий хотя бы один тег - PullRequest
0 голосов
/ 03 августа 2020

Я использую эластичный поиск 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();
    }

Не могли бы вы помочь мне?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...