我是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/