0
我试图运行对elasticsearch一个查询,就会发现文件凡符合下列条件之一适用:排除空数组领域 - 但包括文档丢失的领域 - 在elasticsearch
- 文件缺少给定场(
tags
)OR - 的文档具有价值
foo
作为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"
}
}
]
}
为什么不设置'null_value:false'会排除所有包含空值的空值的文档?它似乎应该来自缺少的过滤器文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-missing-filter.html – ysimonson 2014-10-01 21:22:25
“null_value”属性的“缺少”过滤器是告诉ES考虑为字段设置的“null_value”字段(通过映射)被视为缺失字段。在我给出的例子中,如果你把'“标签”:[“_your_null_value_of_choice _”]并设置为''null_value“:true'将认为该文档中有一个空值的数组。如果你把''null_value':false',这个文件将不被考虑,因为ES不知道你放在那里的值是否为null。因此,“null_value”属性不用于您认为应该使用的属性,它与为字段设置的“null_value”关联。 – 2014-10-02 11:03:37