Elasticsearch(三)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Elasticsearch(三)

本系列相关文章:

基本概念:Elasticsearch(一)

Mapping:Elasticsearch(二)



在 ES 中,全文搜索与 Analysis 部分密不可分。我们为什么能够通过一个简单的词条就搜索到整个文本?因为 Analyzer 分析器的存在,其作用简而言之就是把整个文本按照某个规则拆分成一个一个独立的字或词,然后基于此建立倒排索引。



01


Analyzer



Analyzer(分析器)的作用前文已经说过了:拆分文本。


每一个 Analyzer 都由三个基础等级的构建块组成:

  • Character filters
  • Tokenizer
  • Token filters

1、Character filters :接受原始输入文本,将其转换为字符流并按照指定规则基于字符进行增删改操作,最后输出字符流。


2、Tokenizer :接受字符流作为输入,将其按照指定规则拆分为单独的     tokens( 这里的 token 就是我们通常理解的字或者词 ),最后输出 tokens 流。


3、Token filters :接受 tokens 流作为输入,按照指定规则基于 token 进行增删改操作,最后的输出也是 tokens 流。


一个完整的包含以上三个部分的分析流程如下图所示:


注意:并不是每一个 Analyzer 分析器都需要同时具备以上三种基础构建块。


一个 Analyzer 分析器的组成有:

  • 零个或多个 Character filters
  • 必须且只能有一个 Tokenizer
  • 零个或多个 Token filters



02


Character filter



Character filter 的作用就是对字符进行处理,比如移除 HTML 中的元素如 <b> ,指定某个具体的字符进行替换 abc => 123 ,或者使用正则的方式替换掉匹配的部分。


ES 内置了以下三种 Character filters :




03


Tokenizer



Tokenizer  的作用就是按照某个规则将文本字符流拆分成独立的 token(字词)。


word、letter、character 的区别:

word:我们通常理解的字或者词。
letter:指英语里的那 26 个字母。
character:指 letter 加上其它各种标点符号。

token 和 term 的区别(参考Lucene):

token:在文本分词的过程中产生的对象,其不仅包含了分词对象的词语内容,还包含了其在文本中的开始和结束位置,以及这个词语的类型(是关键词还是停用词之类的)。
term:指文本中的某一个词语内容,以及其所在的 field 域。

然而,在某些语境下,其实 token 和 term 更关注的仅仅只是词语内容本身。


ES 内置了十五种 Tokenizer ,并划分为三类:


1、面向字词:


2、以字词的某部分为粒度:


3、结构化文本:




04


Token Filter



Token Filter 的作用就是把 Tokenizer 处理完生成的 token 流进行增删改再处理。


ES 内置的 token filter 数量多达四五十种:

上图只是简单罗列说明,此处不进行展开说明,更多细节还是查阅官方文档好了。




05


Analyzer



ES 内置了以下 Analyzer :


可以看到每一个 Analyzer 都紧紧围绕 Character filters 、Tokenizer、Token filters 三个部分。

同样,只要选择并组合自己需要的以上这三个基本部分就可以简单的进行自定义 Analyzer 分析器了。




06


End



本文简单介绍了与全文搜索密切相关的【分析】这一重要部分,而如何进行实际的分析器设置则与上一篇文章 Mapping 相关联,另外除了 ES 内置的之外,还有很多开源的分析器同样值得使用,比如中文分词,使用较多的就是 IK 分词。


本篇完。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
存储 设计模式 分布式计算
全量、增量、流水、拉链、快照、代理键、缓慢变化维...
全量、增量、流水、拉链、快照、代理键、缓慢变化维...
|
6月前
|
SQL 前端开发 Java
深入分析 Spring Boot 项目开发中的常见问题与解决方案
本文深入分析了Spring Boot项目开发中的常见问题与解决方案,涵盖视图路径冲突(Circular View Path)、ECharts图表数据异常及SQL唯一约束冲突等典型场景。通过实际案例剖析问题成因,并提供具体解决方法,如优化视图解析器配置、改进数据查询逻辑以及合理使用外键约束。同时复习了Spring MVC视图解析原理与数据库完整性知识,强调细节处理和数据验证的重要性,为开发者提供实用参考。
266 0
|
云安全 存储 运维
阿里云的ACE认证含金量高不高?考试内容是什么?
作为目前市场上占比最大的云计算,阿里云旗下的认证是相当具有含金量的。
|
8月前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
281 20
|
存储 C++
【数据结构】链表 详解
【数据结构】链表 详解
233 0
|
存储 缓存 前端开发
《构建高性能的前端应用:优化技巧与最佳实践》
本文探讨了构建高性能前端应用的关键技巧与最佳实践。从代码优化、资源压缩到网络请求管理,提供了一系列有效的解决方案,旨在帮助开发者提升前端应用的性能和用户体验。
|
Java 测试技术 定位技术
《手把手教你》系列技巧篇(二十一)-java+ selenium自动化测试-浏览器窗口的句柄(详细教程)
【4月更文挑战第13天】本文介绍了如何获取浏览器窗口句柄,句柄是标识浏览器窗口的唯一ID。文章首先解释了窗口句柄的概念,然后通过Java代码示例展示了在单个、多个窗口句柄情况下的操作,包括打印单个窗口句柄和获取所有窗口句柄的方法。在多窗口句柄的场景中,代码演示了如何在不同标签页之间切换。最后,文章强调了句柄在实际操作中的重要性,特别是在处理多个窗口时。
252 0
|
缓存 前端开发 JavaScript
理解 Proxy 和 Object.defineProperty:提升你的 JavaScript 技能(下)
理解 Proxy 和 Object.defineProperty:提升你的 JavaScript 技能(下)
理解 Proxy 和 Object.defineProperty:提升你的 JavaScript 技能(下)
|
安全 JavaScript 前端开发
Springboot抵御即跨站脚本(XSS)攻击
Springboot抵御即跨站脚本(XSS)攻击
|
存储 运维 监控
阿里云图数据库GDB助力钉钉 构建工作场景下的知识图谱
钉钉(DingTalk)是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台,提供PC版,Web版和手机版,有考勤打卡、签到、审批、日志、公告、钉盘、钉邮等强大功能。钉钉因中国企业而生,帮助中国企业通过系统化的解决方案,全方位提升中国企业沟通和协同效率。
2261 0
阿里云图数据库GDB助力钉钉 构建工作场景下的知识图谱