gpt4 book ai didi

java - 如何返回字段不存在的所有文档,但如果存在则返回值为 "tag1"的文档

转载 作者:行者123 更新时间:2023-12-04 07:13:15 26 4
gpt4 key购买 nike

我在用 Java 构建 Elasticsearch 查询时遇到问题。
我想搜索字段 X 不存在的所有文档,或者如果它存在,则返回字段 X 中的值为“tag1”的所有文档
目前,我已经用 Java 编写了这个查询:

BoolQueryBuilder boolQueryBuilder = boolQuery();`
boolQueryBuilder.mustNot(QueryBuilders.existsQuery("X"));`
boolQueryBuilder.filter(termsQuery("X", "tag1"));`
对此的 SQL 查询将类似于:
select * from table_name where X is null or x = 'tag1';
但是这样做会给我空的搜索结果。但是,如果我单独搜索这些查询中的每一个,它就可以正常工作。

最佳答案

你需要使用应该

BoolQueryBuilder subBoolQuery = boolQuery();
subBoolQuery.mustNot(QueryBuilders.existsQuery("X"));

BoolQueryBuilder boolQueryBuilder = boolQuery();
BoolQueryBuilder.minimumShouldMatch(1);
boolQueryBuilder.should(subBoolQuery);
boolQueryBuilder.should(termsQuery("X", "tag1"));
Elasticsearch 查询:
{
"query": {
"bool": {
"should": [
{
"term": {
"X": {
"value": "tag1"
}
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "X"
}
}
]
}
}
],
"minimum_should_match": 1
}
}
}

关于java - 如何返回字段不存在的所有文档,但如果存在则返回值为 "tag1"的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68939180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com