Elasticsearch Java-Play Framework - 在query BoolQueryBuilder中写一个query

Elasticsearch Java-Play Framework - in query BoolQueryBuilder to write a query

这是我的 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

的常见问题

案例二 当我有另一个像 is_active 这样的过滤器时,它的 return 是 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 中获取数据。您可以说它的工作方式类似于 MySQL 中的 OR 条件。我们需要将其更改为 AND 条件,我正在尝试但不适合我。

您可以将 must 替换为 filter

或者,您只需要另一层 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 作为您的查询。