在弹性搜索中搜索具有空/空对象字段的文档
Posted
技术标签:
【中文标题】在弹性搜索中搜索具有空/空对象字段的文档【英文标题】:search document with null/empty object field in elasticsearch 【发布时间】:2020-01-30 16:01:59 【问题描述】:我有一个带有以下映射的弹性搜索索引,一些文档包含状态为 id:1, status:"failed" 的对象,有些为空,似乎无法找到一种方法来搜索具有“状态”的文档。 name" as ["failed", "null", "passed"] (其中任一状态为失败、通过或未设置/null 的文档)。例如,像下面这样进行术语查询会给出空结果集
"name":
"type":"keyword"
"status":
"properties":
"id":
"type": "integer"
,
"status":
"type": "keyword"
查询已尝试:
"terms":
"status.name": [ "failed", "null" ]
还尝试将status.name的映射设置为"null_value": "null"
【问题讨论】:
【参考方案1】:使用仅包含 should 子句的 bool 查询,要求至少有一个查询必须匹配。您可以通过将exists
-query 放入bool
-query 的must_not
-子句中来查询没有字段或在该字段中具有空值的文档(请参阅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"
]
【讨论】:
不要在“status.name”上做exists
,它应该只在“status”(对象)上,否则会得到空/非预期的结果结果以上是关于在弹性搜索中搜索具有空/空对象字段的文档的主要内容,如果未能解决你的问题,请参考以下文章
为啥 mongoosastic 填充/弹性搜索没有填充我的参考资料之一?我得到一个空对象
为啥 mongoosastic 填充/弹性搜索没有填充我的参考资料之一?我得到一个空对象
Elasticsearch:过滤具有空geo_point值的文档