在查询boolquerybuilder中编写查询

xqk2d5yq  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(726)

这是我的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中,这个查询对我来说运行良好,并且只显示faq id所在的faq 2,3,4 案例2当我有另一个过滤器时,比如is\u active,它返回所有数据,其中is\u active=y,并且还与逗号分隔的id的faq相关

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中的条件。我们需要把它改成我正在努力但不为我工作的状态。

2ul0zpep

2ul0zpep1#

你可以替换 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 作为你的问题。

相关问题