首页 > 解决方案 > 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。

标签: pythonelasticsearchelasticsearch-dsl

解决方案


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

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

术语查询小写所有字符,匹配精确查询不是很有用。请参阅链接上的警告部分以改用匹配查询,如下所示:

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

推荐阅读