我正在尝试针对弹性搜索运行查询,该搜索将找到符合以下条件之一的文档:
tags
)或foo
是tags
数组问题是我当前的查询将返回具有tags
字段的文档,其中值为空数组。据推测,这是因为elasticsearch正在将空数组视为完全没有字段。这是我正在运行的完整查询,它返回了错误的结果:
{
"from": 0,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"exists": {
"field": "_rankings.public"
}
},
{
"or": [
{
"missing": {
"existence": true,
"field": "tags",
"null_value": false
}
},
{
"terms": {
"execution": "or",
"tags": [
"foo"
]
}
}
]
}
]
}
},
"query": {
"match_all": {}
}
}
},
"size": 10000,
"sort": [
{
"_rankings.public": {
"ignore_unmapped": true,
"order": "asc"
}
}
]
}
答案 0 :(得分:1)
我认为你不能轻易地实现这一目标,并且开箱即用#34;由于你已经提到的原因:空数组和一个没有值的字段(对应于那个数组)之间没有区别。
您唯一的选择可能是使用" null_value"对于那个"标签"字段,如果您对进入文档的数据有任何控制权,则可以处理" []"数组为' [" _your_null_value_of_choice _"]'。并在您的查询中将"null_value": false
更改为true
。