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

ops/2024/11/19 23:41:25/

Elasticsearch 查询时 term、match、match_phrasematch_phrase_prefix 的区别

在讲述 es 查询时 term、match、match_phrasematch_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__25">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__72">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__122">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_phrasematch_phrase_prefix 的区别,大家根据具体适用的场景选择合适的查询语句哈。


http://www.ppmy.cn/ops/135092.html

相关文章

CC1链学习记录

🌸 前言 上篇文章学习记录了URLDNS链,接下来学习一下Common-Colections利用链。 🌸 相关介绍 Common-Colections是Apache软件基金会的项目,对Java标准的Collections API提供了很好的补充,在其基础上对常用的数据结构…

Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些? 2、什么是网络爬虫? 3、什么是通用爬虫和聚焦爬虫? 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…

121、SQL Server取开始时间、截止时间

--当天开始 SELECT dateadd(ms,0,DATEADD(dd, DATEDIFF( dd,0,getdate()), 0)) 当天开始 --当天结束 SELECT dateadd(ms,-3,DATEADD(dd, DATEDIFF(dd,-1,getdate()), 0)) 当天结束 注意:-3可以修改为-2,但是不能为-1,若为-1&am…

基于卷积神经网络的航空发动机剩余寿命预测Matlab实现

本文利用NASA提供的涡扇发动机退化数据集,进行数据预处理,构建训练样本和测试样本,然后搭建卷积神经网络(Convolutional Neural Network,CNN),学习训练数据,最后利用测试数据,分析神…

【C++学习】类和对象(下)

目录 一、再谈构造函数 🍔构造函数体赋值 🍟初始化列表 二、explicit 关键字 三、static 成员 🍔概念 🍟特性 四、友员 🍔友员 🍟友元函数 🌮友元类 五、内部类 🍔概念 …

lab2:docker基础实战

一、实验目的 1.通过本次实验,完成Docker主机的安装和配置、镜像的搜索和下载、容器生命周期的基本管理、容器网络的管理。 2.通过Dockerfile来构建nginx镜像,了解Dockerfile镜像构建过程。 二、实验内容与实验要求 1.完成Docker的安装和配置。 2.完…

电脑Vs台式机 (后续还有)

性能方面: 处理器性能:在相同配置参数下,台式机的处理器性能发挥通常更出色。这是因为台式机的散热条件更好,处理器可以在更稳定的温度下工作,不用担心过热降频等问题。例如,在进行视频编辑、3D 建模等高强…

如何将java项目打包成docker 镜像并且可运行

java 项目打包成 Docker 可运行的镜像,其目的是便于运用docker容器来管理项目。下面是具体的步骤,如果大家遇到啥问题可以留言有空会逐一回复。 目录 1. 确保项目已经打包成 JAR 文件 2. 编写 Dockerfile 3. 构建 Docker 镜像 4. 运行 Docker 容器 …