【问题标题】:Elasticsearch Java-Play Framework - in query BoolQueryBuilder to write a queryElasticsearch Java-Play Framework - 在查询 BoolQueryBuilder 中编写查询
【发布时间】:2021-03-08 09:36:26
【问题描述】:

这是我的 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 中获取数据。你可以说它就像 MySQL 中的OR 条件一样工作。我们需要将其更改为我正在尝试但不适用于我的 AND 条件。

【问题讨论】:

    标签: java elasticsearch playframework-2.0 elasticsearch-java-api


    【解决方案1】:

    您可以将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 作为您的查询。

    【讨论】:

    • 非常感谢@anton Lashin,顺便说一句,已经找到了解决方案,和你的回答一样,谢谢哥们BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder queryBuilderPost = QueryBuilders.boolQuery();
    猜你喜欢
    • 1970-01-01
    • 2017-12-13
    • 2021-09-17
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多