python - 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()
术语查询小写所有字符,匹配精确查询不是很有用。请参阅链接上的警告部分以改用匹配查询,如下所示:
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
推荐阅读
- java - 如何验证 ::after 伪元素是否存在于硒中
- angular - Angular:如何在茉莉花单元测试中测试键盘事件
- javascript - 如何修改 App.js 以显示 HTML 模板
- spring-boot - Okhttp 使用 spring MultipartFile 和 json 对象创建 MultipartBody
- ios - Xcode:Swift 包管理器中的自定义构建配置
- php - PHP:找到相同的键时如何不替换数组中的键
- active-directory - PC 的 DNS 名称是否可以在活动目录域中解析?
- javascript - 如何导入 javascript 文件以与 Vue-Router 一起使用
- linux - 在 csv 文件中下载许多 URL 并在 Linux 中另存为
- kotlin - Kotlin 协程流中 RxJava .toList() 的等价物