欢迎光临
我们一直在努力

Elasticsearch核心区别:精准匹配 vs 全文检索匹配(原理+场景+API+流程图)

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)

#mermaid-svg-O1kwGNMqUFLAHRL7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-O1kwGNMqUFLAHRL7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-O1kwGNMqUFLAHRL7 .error-icon{fill:#552222;}#mermaid-svg-O1kwGNMqUFLAHRL7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-O1kwGNMqUFLAHRL7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-O1kwGNMqUFLAHRL7 .marker.cross{stroke:#333333;}#mermaid-svg-O1kwGNMqUFLAHRL7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-O1kwGNMqUFLAHRL7 p{margin:0;}#mermaid-svg-O1kwGNMqUFLAHRL7 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-O1kwGNMqUFLAHRL7 .cluster-label text{fill:#333;}#mermaid-svg-O1kwGNMqUFLAHRL7 .cluster-label span{color:#333;}#mermaid-svg-O1kwGNMqUFLAHRL7 .cluster-label span p{background-color:transparent;}#mermaid-svg-O1kwGNMqUFLAHRL7 .label text,#mermaid-svg-O1kwGNMqUFLAHRL7 span{fill:#333;color:#333;}#mermaid-svg-O1kwGNMqUFLAHRL7 .node rect,#mermaid-svg-O1kwGNMqUFLAHRL7 .node circle,#mermaid-svg-O1kwGNMqUFLAHRL7 .node ellipse,#mermaid-svg-O1kwGNMqUFLAHRL7 .node polygon,#mermaid-svg-O1kwGNMqUFLAHRL7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-O1kwGNMqUFLAHRL7 .rough-node .label text,#mermaid-svg-O1kwGNMqUFLAHRL7 .node .label text,#mermaid-svg-O1kwGNMqUFLAHRL7 .image-shape .label,#mermaid-svg-O1kwGNMqUFLAHRL7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-O1kwGNMqUFLAHRL7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-O1kwGNMqUFLAHRL7 .rough-node .label,#mermaid-svg-O1kwGNMqUFLAHRL7 .node .label,#mermaid-svg-O1kwGNMqUFLAHRL7 .image-shape .label,#mermaid-svg-O1kwGNMqUFLAHRL7 .icon-shape .label{text-align:center;}#mermaid-svg-O1kwGNMqUFLAHRL7 .node.clickable{cursor:pointer;}#mermaid-svg-O1kwGNMqUFLAHRL7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-O1kwGNMqUFLAHRL7 .arrowheadPath{fill:#333333;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-O1kwGNMqUFLAHRL7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-O1kwGNMqUFLAHRL7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-O1kwGNMqUFLAHRL7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-O1kwGNMqUFLAHRL7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-O1kwGNMqUFLAHRL7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-O1kwGNMqUFLAHRL7 .cluster text{fill:#333;}#mermaid-svg-O1kwGNMqUFLAHRL7 .cluster span{color:#333;}#mermaid-svg-O1kwGNMqUFLAHRL7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-O1kwGNMqUFLAHRL7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-O1kwGNMqUFLAHRL7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-O1kwGNMqUFLAHRL7 .icon-shape,#mermaid-svg-O1kwGNMqUFLAHRL7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-O1kwGNMqUFLAHRL7 .icon-shape p,#mermaid-svg-O1kwGNMqUFLAHRL7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-O1kwGNMqUFLAHRL7 .icon-shape .label rect,#mermaid-svg-O1kwGNMqUFLAHRL7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-O1kwGNMqUFLAHRL7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-O1kwGNMqUFLAHRL7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-O1kwGNMqUFLAHRL7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

输入查询词:张三

不分词

去索引中查找完全=“张三”的数据

只有完全一致才返回

4.2 全文检索原理(match)

#mermaid-svg-U7dq9mpHTKpPvLKZ{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-U7dq9mpHTKpPvLKZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-U7dq9mpHTKpPvLKZ .error-icon{fill:#552222;}#mermaid-svg-U7dq9mpHTKpPvLKZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-U7dq9mpHTKpPvLKZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-U7dq9mpHTKpPvLKZ .marker.cross{stroke:#333333;}#mermaid-svg-U7dq9mpHTKpPvLKZ svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-U7dq9mpHTKpPvLKZ p{margin:0;}#mermaid-svg-U7dq9mpHTKpPvLKZ .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-U7dq9mpHTKpPvLKZ .cluster-label text{fill:#333;}#mermaid-svg-U7dq9mpHTKpPvLKZ .cluster-label span{color:#333;}#mermaid-svg-U7dq9mpHTKpPvLKZ .cluster-label span p{background-color:transparent;}#mermaid-svg-U7dq9mpHTKpPvLKZ .label text,#mermaid-svg-U7dq9mpHTKpPvLKZ span{fill:#333;color:#333;}#mermaid-svg-U7dq9mpHTKpPvLKZ .node rect,#mermaid-svg-U7dq9mpHTKpPvLKZ .node circle,#mermaid-svg-U7dq9mpHTKpPvLKZ .node ellipse,#mermaid-svg-U7dq9mpHTKpPvLKZ .node polygon,#mermaid-svg-U7dq9mpHTKpPvLKZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-U7dq9mpHTKpPvLKZ .rough-node .label text,#mermaid-svg-U7dq9mpHTKpPvLKZ .node .label text,#mermaid-svg-U7dq9mpHTKpPvLKZ .image-shape .label,#mermaid-svg-U7dq9mpHTKpPvLKZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-U7dq9mpHTKpPvLKZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-U7dq9mpHTKpPvLKZ .rough-node .label,#mermaid-svg-U7dq9mpHTKpPvLKZ .node .label,#mermaid-svg-U7dq9mpHTKpPvLKZ .image-shape .label,#mermaid-svg-U7dq9mpHTKpPvLKZ .icon-shape .label{text-align:center;}#mermaid-svg-U7dq9mpHTKpPvLKZ .node.clickable{cursor:pointer;}#mermaid-svg-U7dq9mpHTKpPvLKZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-U7dq9mpHTKpPvLKZ .arrowheadPath{fill:#333333;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-U7dq9mpHTKpPvLKZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-U7dq9mpHTKpPvLKZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-U7dq9mpHTKpPvLKZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-U7dq9mpHTKpPvLKZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-U7dq9mpHTKpPvLKZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-U7dq9mpHTKpPvLKZ .cluster text{fill:#333;}#mermaid-svg-U7dq9mpHTKpPvLKZ .cluster span{color:#333;}#mermaid-svg-U7dq9mpHTKpPvLKZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-U7dq9mpHTKpPvLKZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-U7dq9mpHTKpPvLKZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-U7dq9mpHTKpPvLKZ .icon-shape,#mermaid-svg-U7dq9mpHTKpPvLKZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-U7dq9mpHTKpPvLKZ .icon-shape p,#mermaid-svg-U7dq9mpHTKpPvLKZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-U7dq9mpHTKpPvLKZ .icon-shape .label rect,#mermaid-svg-U7dq9mpHTKpPvLKZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-U7dq9mpHTKpPvLKZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-U7dq9mpHTKpPvLKZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-U7dq9mpHTKpPvLKZ :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

输入查询词:苹果手机

分词:苹果、手机

分别匹配两个词语

包含任意词语都返回

按相关性打分排序

五、详细对比: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🌺点点关注,收藏不迷路🌺

    赞(0)
    未经允许不得转载:171主机测评 » Elasticsearch核心区别:精准匹配 vs 全文检索匹配(原理+场景+API+流程图)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址