gpt4 book ai didi

java - 查询elasticsearch中某些文档缺少的字段

转载 作者:行者123 更新时间:2023-12-01 10:12:58 31 4
gpt4 key购买 nike

我有一个特殊的需求,我需要在 Elasticsearch 中查询 F1 字段。F1 并不存在于所有文档中。我的搜索应该是缺失的 F1 文档和具有某些值(value)的 F1。F1 丢失或 F1 = 'A1'

我不确定这在 Elasticsearch 中是否可行。这是我的查询,我知道这不是正确的查询。希望有人能纠正它或 Java 程序。

{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"bool": {
"should": {
"terms": {
"F1": [
"Some Value"
]
}
}
}
},
{
"missing": {
"field": "F1"
}
}
]
}
}
}
}
}

这是我构建查询的 java 代码。

  public QueryBuilder getQueryBuilder() {
QueryBuilder qb;
//what do we want to return if there is no request? Nothing or all.
if (filters == null || filters.isEmpty()) {
qb = QueryBuilders.matchAllQuery();
} //build our filtered query using given filters in our request
else {
Set<String> keys = filters.keySet();
BoolFilterBuilder boolFilterBuilder = FilterBuilders.boolFilter();
for (String key : keys) {
Set<Object> values = filters.get(key);
if (values == null || values.toString().isEmpty()) {
continue; //Ignore nothing to do.
}
if (key.equalsIgnoreCase(Constants.MISSING_FILTER)) {
Iterator i = values.iterator();
while (i.hasNext()) {
boolFilterBuilder.must(FilterBuilders.missingFilter((String) i.next()));
}
} else {
boolFilterBuilder.must(buildShouldQuery(key, values));
}
}
qb = QueryBuilders.filteredQuery(createSearchQueryBuilder(), boolFilterBuilder);
}
return qb;
}

最佳答案

试试这个。

{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"should": [
{ "terms": { "F1": ["Some Value"] },
{ "missing": { "field": "F1" } }
]
}
}
}
}
}

关于java - 查询elasticsearch中某些文档缺少的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36047277/

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