Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别

Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别

  • [keyword 与 text 区别](#keyword 与 text 区别)
  • [term 查询](#term 查询)
  • [match 查询](#match 查询)
  • [match_phrase 查询](#match_phrase 查询)
  • [match_phrase_prefix 查询](#match_phrase_prefix 查询)
  • 写在最后

在讲述 es 查询时 term、match、match_phrase、match_phrase_prefix 的区别之前,先来了解一下 es 文本字段类型 keyword、 text 的区别。

keyword 与 text 区别

在 es 创建索引中,经常会遇到 keyword 、text 字段类型的选择,其实他们之间的区别也比较容易理解。

keyword:在索引时,keyword类型的数据不会被分词器处理,而是直接作为整体存储到索引中。

text:在索引时,text类型的数据会经过分词器处理,将文本切分成多个词条,然后存储到索引中。

可以通过以下命令来查看分词结果,es 不指定分词器则走的是 es 默认的分词器(通常情况下都是单字)

查看 text 字段类型分词结果

复制代码
POST /_analyze
{
  "text": "很高兴为您服务"
}

查看 keyword 字段类型分词结果

复制代码
POST /_analyze
{
  "analyzer": "keyword", 
  "text": "很高兴为您服务"
}

term 查询

term 查询用于精确值匹配,它不会对查询的文本进行分词处理,直接在索引中查找精确值。

适用场景:适用于关键字(keyword)类型的字段,或者已经过精确值(如数字、日期等)处理的文本字段。这里我用 term 查询来精确查询 convId属性字段

复制代码
GET crm_meiqia_conversation_tmp/_search
{  
  "query": {  
    "bool": {  
      "must": [  
        {
          "term" : {
              "convId" : 6305271104
            }
        } 
      ]
    }  
  }  
}

查询结果如图

match 查询

match 查询是一种全文搜索查询,它会对查询文本进行分词处理,然后搜索分词后的结果。它适用于 text 类型的字段。

适用场景:用于执行全文搜索,适合于搜索文本内容。这里我搜索一下索引中的 text 类型字段 ,由于表数据比较多,因此上一次查询的 convId 字段我还保留。

复制代码
GET crm_meiqia_conversation_tmp/_search
{  
  "query": {  
    "bool": {  
      "must": [  
        {
          "term" : {
              "convId" : 6305271104
            }
        } ,
        {  
          "match": {  
            "convContent.content": "哦 一下 保存 "  
          }  
        }
      ]
    }  
  }  
}

查询结果如图

match_phrase 查询

match_phrase 查询是一种精确短语匹配查询,它会在文本中查找包含指定短语的文档,同时考虑短语的顺序和位置。

适用场景:适用于需要精确匹配短语的场景,如引用搜索、精确短语匹配等。比如这里我们还查询上面的一段话,查看一下查询结果,顺序不对的话应是查询不到结果的

复制代码
GET crm_meiqia_conversation_tmp/_search
{  
  "query": {  
    "bool": {  
      "must": [  
        {
          "term" : {
              "convId" : 6305271104
            }
        } ,
        {  
          "match_phrase": {  
            "convContent.content": "哦 一下 保存 "  
          }  
        }
      ]
    }  
  }  
}

查询结果如图

这时候我调整一下查询内容的顺序后再次尝试,就可以查询到数据

复制代码
GET crm_meiqia_conversation_tmp/_search
{  
  "query": {  
    "bool": {  
      "must": [  
        {
          "term" : {
              "convId" : 6305271104
            }
        } ,
        {  
          "match_phrase": {  
            "convContent.content": "保存 一下 "  
          }  
        }
      ]
    }  
  }  
}

查询结果如图

match_phrase_prefix 查询

match_phrase_prefix 查询是 match_phrase 查询的一个变种,它允许对查询短语的最后一个单词进行前缀匹配。

适用场景:适用于需要匹配以特定前缀开头的短语且对查询精度要求较高的场景。这里查询要求前缀匹配,类似于 mysql 的 like 查询 的 "保存%"

复制代码
GET crm_meiqia_conversation_tmp/_search
{  
  "query": {  
    "bool": {  
      "must": [  
        {
          "term" : {
              "convId" : 6305271104
            }
        } ,
        {  
          "match_phrase_prefix": {  
            "convContent.content": "保存 一下 "  
          }  
        }
      ]
    }  
  }  
}

查询结果如图

更换一下顺序,就无法通过前缀匹配到内容了,比如

复制代码
GET crm_meiqia_conversation_tmp/_search
{  
  "query": {  
    "bool": {  
      "must": [  
        {
          "term" : {
              "convId" : 6305271104
            }
        } ,
        {  
          "match_phrase_prefix": {  
            "convContent.content": "一下 保存"  
          }  
        }
      ]
    }  
  }  
}

查询结果如图

写在最后

以上就是 Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别,大家根据具体适用的场景选择合适的查询语句哈。

相关推荐
weixin_6665939914 分钟前
自然资源时空智能体建设方案:从数字化到智能化的演进路径
大数据·人工智能·大模型·云计算·agent·云平台·空间数据库
mykj155121 分钟前
社区日常生活消费能抵扣物业费系统搭建
大数据·社区商城积分抵扣小程序·社区商城小程序·消费积分抵物业费
风行無痕1 小时前
单机Elasticsearch 8.19.18安全升级到9.4.3的过程
大数据·elasticsearch·搜索引擎
小柯南敲键盘1 小时前
跨马翻译:批量图片与视频字幕翻译,支持智能抠图
大数据·人工智能·python·音视频
aax12134531 小时前
VOCs集群治理工程落地|美丽蓝天绿岛项目工艺、控制方案、申报技术要点解析
大数据·人工智能
隔振消音专家1 小时前
冷水机组振动传导影响及专业化减振适配治理方案
大数据·运维
大公产经晚间消息1 小时前
“胜算未来·2026戈峻思享会”即将登陆大连
大数据·人工智能·ai
huihui3612 小时前
北京比较好的商会私域管理软件推荐:选型标准与核验要点
大数据
数智顾问2 小时前
(84页PPT)PWC海科集团生物医药业务5年发展战略项目建议书(附下载方式)
大数据·人工智能·物联网
Elastic 中国社区官方博客2 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
大数据·运维·前端·人工智能·elasticsearch·搜索引擎·全文检索