转自:https://blog.csdn.net/qq_38043440/article/details/101678677
最近项目中使用了ElasticSearch, 在使用基本的查询功能的时候,遇到些头疼的事情,有时候数据明明存在,用term查询就是查不到,用match才可以。有时候缺可以,差点就把es整成玄学了。后来阅读各种博客后,我想我明白其中的原理了。
1. term&match
- term: 精确查询,对查询的值不分词,直接进倒排索引去匹配。
- match; 模糊查询,对查询的值分词,对分词的结果一一进入倒排索引去匹配
2. text&keyword
- text: 在写入时,对写入的值进行分词,然后一一插入到倒排索引。
- keyword: 在写入时,将整个值插入到倒排索引中,不进行分词。
3. 实例分析
- 写入值为 hello world,
- 查询值为 hello world
查询类型 | 写入类型 | 结果 |
---|---|---|
term | text | 无 |
term | keyword | 有 |
match | text | 有 |
match | keyword | 有 |