ElasticSearch-query-term_精确查询
2025-01-22 08:19:30 489 字
This post is also available in English and alternative languages.
ElasticSearch版本:6.5.0(点击跳转官方文档)
term是代表完全匹配,文档中必须包含整个搜索的词汇
1. term 完全匹配
以下示例,查询 books索引、book类型下,name为’中国古代音乐史’的文档。
1 | GET books/book/_search |
这个例子执行完,什么都没查出来,百思不得其解,网上查了下,意思是:elasticsearch 里默认的IK分词器是会将每一个中文都进行了分词的切割,直接想查一整个词,或者一整句话是无返回结果的
这里借用keyword,进行加持
1 | GET books/book/_search |
查询非中文不会出现上述情况
1 | GET books/book/_search |
2. 查询时,加.keyword与不加.keyword的区别是什么?
ES5.0及以后的版本取消了string类型,将原先的string类型拆分为text和keyword两种类型。它们的区别在于text会对字段进行分词处理而keyword则不会。
ES的term query做的是精确匹配而不是分词查询,因此对text类型的字段做term查询将是查不到结果的(除非字段本身经过分词器处理后不变,未被转换或分词),
此时,必须使用.keyword来对字段以keyword类型进行精确匹配
3. terms(查找多个精确值)
查询 books索引、book类型下,价格为31 或 30 的文档
1 | GET books/book/_search |