当前位置: 首页 > news >正文

谷粒商城实战笔记-117-全文检索-ElasticSearch-进阶-term查询

文章目录

  • term 查询
    • term最佳实践
  • match_phrase 查询
  • keyword 查询
  • 区别

在Elasticsearch中, term查询是一种基本的查询类型,用于执行不分析(不经过分析器处理)的精确匹配。以下是 term查询以及与 match_phrasekeyword查询的比较和示例:

term 查询

  • 用途:用于执行不分词的精确匹配,适合用于那些不需要分词的字段,如标签(tags)、状态码(status codes)等。
  • 特点term查询不会对查询字符串进行分析,因此它匹配的是确切的值。它通常用于那些不需要全文搜索的字段。

示例

GET bank/_search
{"query": {"term": {"age": 28}}
}

这个查询将找到所有age字段值为"28"的文档。

term最佳实践

term查询适用非text类型,但语法上,对text类型使用term查询也不会报错,但并不推荐这样做。理由如下:

  1. 不进行分析term查询不会对查询字符串进行分析。这意味着,即使字段是text类型,term查询也会尝试进行精确匹配。

  2. 可能的不匹配:由于text类型的字段在索引时会被分析器分解成单个词元(tokens),使用term查询可能会导致查询不匹配任何文档,因为查询字符串没有被分解成与索引时相同的词元。

  3. 大小写敏感term查询是大小写敏感的,而text字段的分析通常包括将文本转换为小写。这意味着即使文档中包含查询字符串,但由于大小写不匹配,term查询可能找不到匹配项。

  4. 不使用全文搜索功能:使用term查询text字段将绕过全文搜索功能,如词干提取、同义词处理等,这些功能通常用于提高搜索的相关性。

  5. 可能的性能影响:由于term查询通常用于keyword类型的字段,这些字段在索引时不会被分析,因此使用term查询text字段可能不会利用Elasticsearch的缓存机制,这可能会对查询性能产生负面影响。

示例:如果你有一个text类型的字段content,并且你尝试使用term查询来搜索一个完整的短语:

{"query": {"term": {"content": {"value": "The quick brown fox"}}}
}

这个查询可能不会返回任何结果,因为content字段在索引时已经被分词器分解成了单独的词元,而term查询期望找到精确的字符串"The quick brown fox",包括空格和大小写。

如果确实需要在text字段上执行精确匹配,应该考虑使用keyword类型的字段,或者在查询时使用match查询而不是term查询。使用match查询可以利用Elasticsearch的全文搜索功能,包括分词器的处理。

match_phrase 查询

  • 用途:用于执行全文搜索,匹配短语或多个词的精确顺序。
  • 特点match_phrase查询会对查询字符串进行分词,并尝试匹配整个短语或词的顺序。它适用于需要考虑词序的全文搜索场景。

示例

{"query": {"match_phrase": {"description": "quick brown fox"}}
}

这个查询将找到所有description字段包含"quick brown fox"这个短语的文档,并且词的顺序与查询中相同。

keyword 查询

  • 用途:用于对keyword类型的字段执行精确匹配。
  • 特点keyword查询通常用于那些在索引时不经过分词器处理的字段。它允许用户搜索确切的字符串值,而不考虑分词器的影响。

示例

{"query": {"match": {"username.keyword": "john_doe"}}
}

这个查询将找到所有username字段的keyword子字段值为"john_doe"的文档。

区别

  • 分词器termkeyword查询不会对查询字符串进行分析,而match_phrase会。
  • 用途term适合于不需要分析的字段,keyword查询通常用于keyword类型的字段,而match_phrase适合于需要考虑词序的全文搜索。
  • 匹配方式termkeyword查询匹配的是确切的值,而match_phrase匹配的是短语和词的顺序。

在实际使用中,选择哪种查询类型取决于字段的索引方式和搜索需求。如果字段是text类型,可能需要使用matchmatch_phrase查询;如果字段是keyword类型,或者需要执行不分词的精确匹配,可以使用termkeyword查询。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 本地部署 Llama-3-EvoVLM-JP-v2
  • 分布式事务一站式解决方案-Seata
  • 【OpenCV C++20 学习笔记】物体检测-Ballard和Guil霍夫变换
  • 常见框架漏洞 上 (Thinkphp、struts2、Spring、Shiro)
  • Linux中NFS配置
  • 【实现100个unity特效之15】最简单的方法使用shader graphs实现2d非像素和像素树叶草的随风摇摆效果
  • 在Linux上安装Conda以支持Go 1.19
  • 快速体验LLaMA-Factory 私有化部署和高效微调Llama3模型(曙光超算互联网平台异构加速卡DCU)
  • 快速掌握Vue:基础命令详解
  • 大数据应用【大数据导论】
  • 揭露黑产新势力:Akira勒索软件家族深度解析
  • [ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘(已解决)
  • 【linux】linux中特殊权限管理--FACL详细用法教程与应用实战
  • Unity初识
  • C语言深度剖析(部分)--剩下随缘更新
  • $translatePartialLoader加载失败及解决方式
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • C++11: atomic 头文件
  • Effective Java 笔记(一)
  • Github访问慢解决办法
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • oschina
  • Promise面试题2实现异步串行执行
  • PV统计优化设计
  • Vue UI框架库开发介绍
  • Zsh 开发指南(第十四篇 文件读写)
  • 从setTimeout-setInterval看JS线程
  • 从零开始学习部署
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 计算机在识别图像时“看到”了什么?
  • 力扣(LeetCode)357
  • 前端面试之CSS3新特性
  • 全栈开发——Linux
  • 深入浅出Node.js
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 问题之ssh中Host key verification failed的解决
  • 学习笔记:对象,原型和继承(1)
  • 以太坊客户端Geth命令参数详解
  • 硬币翻转问题,区间操作
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​字​节​一​面​
  • ######## golang各章节终篇索引 ########
  • #WEB前端(HTML属性)
  • #数据结构 笔记三
  • (160)时序收敛--->(10)时序收敛十
  • (33)STM32——485实验笔记
  • (done) 两个矩阵 “相似” 是什么意思?
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (二)springcloud实战之config配置中心
  • (分享)自己整理的一些简单awk实用语句
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路