我有一个带有以下映射的elasticsearch索引,一些文档包含状态{id:1,状态:“failed”}}的对象,而某些则为null,似乎找不到我可以搜索具有“status.name”的文档的方式[“failed”,“null”,“passed”](文档状态失败,通过或未设置/为空的文档)。例如,执行如下所示的字词查询会得到空结果集
{
"name":{
"type":"keyword"
}
"status": {
"properties": {
"id": {
"type": "integer"
},
"status": {
"type": "keyword"
}
}
}
}
查询尝试:
{
"terms": {
"status.name": [ "failed", "null" ]
}
还尝试将status.name的映射设置为
"null_value": "null"
最佳答案
将 bool(boolean) 查询与仅应子句一起使用,这要求您的至少一个查询必须匹配。您可以通过将exists
-query放入must_not
-query的bool
-clause中来查询没有字段或在该字段中具有空值的文档(请参阅Elasticsearch引用:Exists-query)。
GET myindex/_search
{
"query": {
"bool": {
"should": [
{"term": {"status.name": {"value": "failed"}}},
{"term": {"status.name": {"value": "passed"}}},
{"bool": {"must_not": {"exists": {"field": "status.name"}}}}
]
}
}
}
关于elasticsearch - 在elasticsearch中搜索具有空/空对象字段的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59989949/