我想检查一个字段是否存在,并返回不存在的文档的结果。我正在使用Golang库Elastic:https://github.com/olivere/elastic
我尝试了以下方法,但不起作用:
e := elastic.NewExistsFilter("my_tag")
n := elastic.NewNotFilter(e)
filters = append(filters, n)
我想检查一个字段是否存在,并返回不存在的文档的结果。我正在使用Golang库Elastic:https://github.com/olivere/elastic
我尝试了以下方法,但不起作用:
e := elastic.NewExistsFilter("my_tag")
n := elastic.NewNotFilter(e)
filters = append(filters, n)
4条答案
按热度按时间agyaoht71#
好的,我不会深入研究你的语言查询API。因为你想搜索一个不存在的字段(空),所以在
must_not
中使用一个exists
过滤器(如果你使用bool过滤器的话):希望这对你有帮助!
谢谢
wyyhbhjk2#
您可以将exist query与bool query must_not搭配使用:
在ElasticSearch6.5中测试
h79rfbju3#
您可以为not exists创建一个布尔查询,如下所示:
soat7uwm4#
我不会试图提供一个完整的解决方案,因为我并不真正熟悉您使用的库(或者,实际上,Go语言)。
然而,Lucene并不支持这里的纯否定查询。Lucene需要被告知 * 要 * 匹配什么。像这样的否定严格地用于禁止搜索结果,但并不隐式地匹配其他所有内容。
为了执行您正在查找的操作,您可能希望使用布尔查询将not filter与match all(我看到的是available in the library)组合在一起。
注意:与任何时候使用“全部匹配”一样,性能可能会受到影响。