python - Elasticsearch-DSL过滤器出现意外结果

标签 python elasticsearch elasticsearch-dsl

我是Elasticsearch和python的elasticsearch-dsl的新手,我真的不知道为什么我的过滤器不返回任何结果:

In [1]: from elasticsearch import Elasticsearch 
   ...: from elasticsearch_dsl import Search 
   ...:  
   ...: search = Search(using=Elasticsearch())                                            

In [2]: search.execute()                                                     
Out[2]: <Response: [<Hit(general-index/1): {'first_name': 'Piero', 'full_name': 'Piero Pierone'}>]>

In [3]: search.filter('term', first_name='Piero').count()                  
Out[3]: 0

我的索引仅包含一个带有first_name == 'Piero'的条目,因此我希望将其返回并计数为1。我得到0。

最佳答案

试试这个,它应该可以工作:

search.filter('term', first_name='piero').count()

term query小写所有字符,并且匹配精确查询不是很有用。请引用链接上的警告部分,改为使用匹配查询,如下所示:
search.filter('match', first_name='Piero').count()

在这里,您将获得带有不同查询和查询类型的所有结果:
In [19]: search.filter('term', first_name='Piero').count()   
Out[19]: 0

In [20]: search.filter('term', first_name='piero').count()   
Out[20]: 1

In [21]: search.filter('match', first_name='Piero').count()   
Out[21]: 1

In [22]: search.filter('match', first_name='piero').count()   
Out[22]: 1

关于python - Elasticsearch-DSL过滤器出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58991159/

相关文章:

elasticsearch - 以编程方式设置索引的read_only_allow_delete属性

python - 当本地模块屏蔽了外部模块导入的标准库模块时,如何导入外部模块?

elasticsearch - Logstash 没有为 Filebeat 和 Packetbeat 创建正确的索引

django - Elasticsearch 在多个索引上打分 : dfs_query_then_fetch returns the same scores as query_then_fetch

ruby - 如何搜索由 _ 和 . 分隔的词。在 Elasticsearch 中?

elasticsearch - 脚本过滤器字段值在数组中

elasticsearch - 需要从 Elasticsearch 上的 AND、OR 过滤器升级为 ES7 的 bool 查询

python - 库的行为有所不同,具体取决于是否安装

python - Azure 中与 Aws SqS 最相似的队列服务是什么?

Python 按文件夹模块导入