我想检查字段是否存在,并返回不存在的文档的结果。我正在使用Golang库Elastic:https://github.com/olivere/elastic
我尝试了以下但不起作用:
e := elastic.NewExistsFilter("my_tag")
n := elastic.NewNotFilter(e)
filters = append(filters, n)
答案 0 :(得分:8)
好的,我不会深入你的语言查询API。由于您要搜索不存在的字段(null),请在exists
内使用must
过滤器(如果您使用bool过滤器):
{
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": [
{
"exists": {
"field": "your_field"
}
}
]
}
}
}
},
"from": 0,
"size": 500
}
希望这有帮助!
由于
答案 1 :(得分:0)
我不会尝试提供完整的解决方案,因为我并不熟悉您使用的库(或者实际上是go语言)。
然而,Lucene并不像你在这里那样支持纯负面查询。需要告诉Lucene 匹配的内容。像这样的否定服务严格禁止搜索结果,但不会隐含地匹配其他所有内容。
为了做你想要的事情,你会想要使用一个布尔查询来将你的过滤器与一个匹配全部(我看到的是available in the library)结合起来。
注意:与任何时候使用全部匹配一样,性能可能会受到影响。
答案 2 :(得分:0)
您可以创建不存在的bool查询,如下所示:
existsQuery := elastic.NewExistsQuery(fieldName)
existsBoolQuery := elastic.NewBoolQuery().MustNot(existsQuery)
答案 3 :(得分:0)
您可以将exist query与bool query must_not结合使用:
GET /_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "your_field"
}
}
}
}
}
在Elasticsearch 6.5中测试