Elasticsearch-DSL 过滤器的意外结果
Unexpected outcome with Elasticsearch-DSL filter
我是 Elasticsearch 和 python 的 elasticsearch-dsl
的新手,我真的不明白为什么我的过滤器 returns 没有结果:
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 小写所有字符,匹配精确查询不是很有用。请参阅 link 上的警告部分以改用匹配查询,如下所示:
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
我是 Elasticsearch 和 python 的 elasticsearch-dsl
的新手,我真的不明白为什么我的过滤器 returns 没有结果:
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 小写所有字符,匹配精确查询不是很有用。请参阅 link 上的警告部分以改用匹配查询,如下所示:
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