首页 > 解决方案 > Elasticsearch Java-Play Framework - 在查询 BoolQueryBuilder 中写一个查询

问题描述

这是我的 ES 文档结构

admin_faq
  - faq_id
  - title
  - is_active

案例 1 过滤器 使用逗号分隔FAQ id's 2,3,4. 拆分 ID

        String[] array = assignedCategories.split(",");
        for (String value : array) {
            queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
        }

在案例 1 中,此查询对我来说很好,并且只显示常见问题解答 ID 所在的位置2,3,4

案例 2 ,当我有另一个过滤器,比如 is_active,所以它返回 is_active=Y 的所有数据,并且还与逗号分隔的 id 的常见问题解答有关

        String[] array = assignedCategories.split(",");
        for (String value : array) {
            queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
        }
        queryBuilderPost.must(QueryBuilders.termsQuery("is_active", isActive));

注意:我希望只从具有活动记录的逗号分隔 id 中获取数据。您可以说它OR在 MySQL 中的工作方式类似。我们需要将其更改为我正在尝试但不为我工作的 AND 条件。

标签: javaelasticsearchplayframework-2.0elasticsearch-java-api

解决方案


你可以只替换mustfilter.

或者,您只需要另一层bool查询。

String[] array = assignedCategories.split(",");
for (String value : array) {
  queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
}
QueryBuilder bool = QueryBuilders.boolQuery();
bool.must(queryBuilderPost);
bool.must(QueryBuilders.termsQuery("is_active", isActive));

然后bool用作您的查询。


推荐阅读