Elasticsearch核心区别:精准匹配 vs 全文检索匹配(原理+场景+API+流程图)
- 一、前言
- 二、基础定义:两种匹配方式是什么?
- 2.1 精准匹配(Exact Matching)
- 2.2 全文检索匹配(Full-text Matching)
- 三、核心区别总览(最关键一张表)
- 四、底层原理流程图
- 4.1 精准匹配原理(term)
- 4.2 全文检索原理(match)
- 五、详细对比:5大核心差异
- 5.1 分词处理区别(最根本)
- 5.2 字段类型区别
- 5.3 查询结果区别
- 5.4 排序方式区别
- 5.5 性能区别
- 六、实战代码对比
- 6.1 数据准备
- 6.2 精准匹配(term)—— 查询phone
- 6.3 全文检索(match)—— 查询name
- 6.4 错误示范:term 查询 text 字段
- 七、使用场景:什么时候用哪种?
- 7.1 必须使用精准匹配(term)的场景
- 7.2 必须使用全文检索(match)的场景
- 八、一句话总结(最容易记住)
- 九、最终口诀
🌺The Begin🌺点点关注,收藏不迷路🌺 |
一、前言
在 Elasticsearch 中,匹配方式直接决定查询结果是否准确、性能是否高效。
很多新手分不清精准匹配和全文检索匹配,经常出现:
- 明明有数据却查不出来
- 查询结果不准确
- 用错API导致性能极差
本文从原理、适用字段、API、场景、流程图全方位对比,让你彻底掌握两者区别。
二、基础定义:两种匹配方式是什么?
2.1 精准匹配(Exact Matching)
不拆分文本,完全一致才匹配
- 不对查询词分词
- 要求字段内容完全一样
- 用于
keyword字段 - 代表API:
term、terms
2.2 全文检索匹配(Full-text Matching)
先分词,再匹配任意/全部词语
- 对查询文本分词
- 匹配包含词语的文档
- 用于
text字段 - 代表API:
match、match_phrase
三、核心区别总览(最关键一张表)
| 序号 | 对比维度 | 精准匹配 | 全文检索匹配 |
|---|---|---|---|
| 1 | 是否分词 | 不分词 | 分词 |
| 2 | 匹配规则 | 完全一致才匹配 | 包含词语即可匹配 |
| 3 | 适用字段类型 | keyword | text |
| 4 | 典型API | term、terms | match、match_phrase |
| 5 | 结果排序 | 不计算得分 | 按相关性_score排序 |
| 6 | 用途 | 过滤、精确查询、ID、状态 | 搜索、模糊查询、内容检索 |
| 7 | 性能 | ⚡ 极快 | 较快 |
| 8 | 示例 | 查询手机号=13800138000 | 查询内容包含“电脑”“手机” |
四、底层原理流程图
4.1 精准匹配原理(term)
4.2 全文检索原理(match)
五、详细对比:5大核心差异
5.1 分词处理区别(最根本)
- 精准匹配:查询词原封不动去匹配
- 全文检索:查询词会被分词器拆分成多个单词
5.2 字段类型区别
- 精准匹配:必须用于
keyword - 全文检索:必须用于
text
5.3 查询结果区别
- 精准匹配:结果绝对准确,不多查、不漏查
- 全文检索:结果智能匹配,包含关键词就返回
5.4 排序方式区别
- 精准匹配:不计算分数,默认按插入顺序
- 全文检索:按相关性得分排序,越匹配越靠前
5.5 性能区别
- 精准匹配:性能极高,消耗资源极低
- 全文检索:需要分词+评分,性能略低
六、实战代码对比
6.1 数据准备
PUT/user{"mappings":{"properties":{"name":{"type":"text","fields":{"keyword":{"type":"keyword"}}},"phone":{"type":"keyword"}}}}PUT/user/_doc/1{"name":"张三","phone":"13800138000"}6.2 精准匹配(term)—— 查询phone
GET/user/_search{"query":{"term":{"phone":"13800138000"}}}✅能查到,完全一致。
6.3 全文检索(match)—— 查询name
GET/user/_search{"query":{"match":{"name":"张三"}}}✅能查到,分词匹配。
6.4 错误示范:term 查询 text 字段
GET/user/_search{"query":{"term":{"name":"张三"}}}❌查不到!因为term不分词,无法匹配分词后的text字段。
七、使用场景:什么时候用哪种?
7.1 必须使用精准匹配(term)的场景
- 查询ID、订单号、手机号、身份证
- 查询状态值(published、draft)
- 过滤、分类、枚举
- 需要100%准确的查询
7.2 必须使用全文检索(match)的场景
- 搜索文章标题、内容
- 搜索商品名称、描述
- 搜索评论、日志
- 需要模糊、智能、相关的搜索
八、一句话总结(最容易记住)
- 精准匹配 = 完全一样才查出来 = keyword + term
- 全文检索 = 包含关键词就查出来 = text + match
九、最终口诀
精准匹配查号码,完全一致才返回;
全文检索搜内容,分词匹配智能排;
字段类型别用错,term对应keyword,match对应text!
🌺The End🌺点点关注,收藏不迷路🌺 |