弹性搜索-Java BoolQuery API应该过滤所有不匹配的内容

时间:2018-07-31 07:27:36

标签: java elasticsearch elastic-stack

我的文档中有以下字段和值,并试图获取ids,它们都与我的输入查询不匹配。

请找到我的弹性搜索索引中包含的文档。

id      region
1001    MEA
1002    MEA
1003    EUR
1004    MEA
1005    EUR
1006    AF

我想过滤与区域MEA不匹配的ID。

我期望得到如下结果。

id      region
1003    EUR
1005    EUR
1006    AF

到目前为止,我正在使用以下查询

 QueryBuilder regionQB = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termsQuery("catalog_product_id", catalog_product_id_list))
                    .filter(QueryBuilders.termQuery("region_id", "MEA"));

给出所有匹配的结果(区域MEA)。

1 个答案:

答案 0 :(得分:1)

用于过滤与区域“ MEA”不匹配的ID 您可以使用 mustNot()来代替filter()。 请参考以下代码,

QueryBuilder regionQB = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termsQuery("catalog_product_id", catalog_product_id_list))
                    .mustNot(QueryBuilders.termQuery("region_id", "MEA"));