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

【Elasticsearch】分析器的构成

在Elasticsearch中,分析器(Analyzer)是一个处理文本数据的管道,它将输入的文本转换为一系列词元(tokens),并可以对这些词元进行进一步的处理和规范化。分析器由以下三个主要组件构成:

1.字符过滤器(Character Filters)

字符过滤器是分析器管道中的第一步,用于对输入文本进行预处理。它们可以添加、删除或修改文本中的字符。字符过滤器是可选的,一个分析器可以有零个或多个字符过滤器。

• 常见用途:例如,可以使用字符过滤器去除HTML标签(如`<b>`、`<h1>`等),或者将某些特定字符替换为其他字符。

• 示例:如果输入文本是`<p>Ironman is flying</p>`,通过`html_strip`字符过滤器后,文本会被转换为`Ironman is flying`。

2.分词器(Tokenizer)

分词器是分析器的核心组件,负责将文本分割成单独的词元(tokens)。分词器根据特定的规则(如空白字符、标点符号或语言规则)将文本拆分为多个词元。一个分析器必须且只能有一个分词器。

• 常见分词器:

• 标准分词器(Standard Tokenizer):根据语法和标点符号将文本分割成词元。

• 空白分词器(Whitespace Tokenizer):在遇到空白字符时将文本分割成词元。

• N-gram分词器:生成文本的N-gram片段,常用于自动补全。

• 示例:对于文本`Ironman is flying`,使用空白分词器会生成词元`[Ironman, is, flying]`。

3.词元过滤器(Token Filters)

词元过滤器是分析器管道中的最后一步,用于对分词器生成的词元进行进一步处理。它们可以添加、修改或删除词元,但不能改变词元的位置或字符偏移量。

• 常见用途:

• 小写过滤器(Lowercase Token Filter):将所有词元转换为小写。

• 停用词过滤器(Stop Token Filter):移除常见的停用词(如`the`、`is`等)。

• 同义词过滤器(Synonym Token Filter):引入同义词。

• 词干提取(Stemming):将词元还原为词根形式(如将`went`还原为`go`)。

• 示例:对于词元`[Ironman, is, flying]`,使用小写过滤器后会生成`[ironman, is, flying]`。

总结

分析器通过这三个组件的协同工作,将输入的文本转换为适合索引和搜索的词元流。通过合理配置字符过滤器、分词器和词元过滤器,可以实现对文本的灵活处理,从而提高搜索结果的相关性和准确性。


分析器的构成

 

分析器——无论是内置的还是自定义的——只是一个包含三个低级构建块的包:字符过滤器、分词器和词元过滤器-character filters, tokenizers, and token filters.。

内置分析器将这些构建块预先打包成适合不同语言和文本类型的分析器。Elasticsearch还暴露了这些单独的构建块,以便它们可以组合起来定义新的`自定义`分析器。

字符过滤器接收原始文本作为字符流,并可以通过添加、删除或更改字符来转换该流。例如,字符过滤器可以用于将印度-阿拉伯数字(٠‎١٢٣٤٥٦٧٨‎٩‎)转换为其阿拉伯-拉丁数字等价物(0123456789),或者从流中删除HTML元素,如`<b>`。

分析器可以有零个或多个字符过滤器,这些过滤器按顺序应用。

分词器接收字符流,将其分解为单独的词元(通常是单个单词),并输出一个词元流。例如,`whitespace`分词器会在看到任何空白字符时将文本分解为词元。它会将文本`"Quick brown fox!"`转换为词元`[Quick, brown, fox!]`。

分词器还负责记录每个词元的顺序或位置以及原始单词的起始和结束字符偏移量。

分析器必须有恰好一个分词器。

词元过滤器接收词元流,并可以添加、删除或更改词元。例如,`lowercase`词元过滤器将所有词元转换为小写,`stop`词元过滤器从词元流中移除常见词汇(停用词)如`the`,而`synonym`词元过滤器会向词元流中引入同义词。

词元过滤器不允许更改每个词元的位置或字符偏移量。

分析器可以有零个或多个词元过滤器,这些过滤器按顺序应用。

http://www.lryc.cn/news/535698.html

相关文章:

  • Python 调用 Azure OpenAI API
  • 数据结构 算法时间复杂度和空间复杂度
  • CNN-BiGRU卷积神经网络双向门控循环单元多变量多步预测,光伏功率预测
  • 钉钉位置偏移解决,钉钉虚拟定位打卡
  • 【面试集锦】如何设计SSO方案?和OAuth有什么区别?
  • Python 基于 OpenCV 的人脸识别上课考勤系统(附源码,部署教程)
  • vcredist_x64.exe 是 Microsoft Visual C++ Redistributable 的 64 位版本
  • Tailwind CSS 的核心理念
  • 集成学习(二):从理论到实战(附代码)
  • HTML 链接
  • 【机器学习】数据预处理之scikit-learn的Scaler与自定义Scaler类进行数据归一化
  • android的第一个app项目(java版)
  • 上位机知识篇---SSHSCP密钥与密钥对
  • 智慧物流新引擎:ARM架构工控机在自动化生产线中的应用
  • [MySQL]2-MySQL索引
  • DeepSeek冲击下,奥特曼刚刚给出对AGI的「三个观察」,包括成本速降
  • 新数据结构(8)——包装类
  • P5:使用pytorch实现运动鞋识别
  • 讲解下SpringBoot中MySql和MongoDB的配合使用
  • 《手札·行业篇》开源Odoo MES系统与SKF Observer Phoenix API在化工行业的双向对接方案
  • 数据结构与算法之数组: LeetCode 905. 按奇偶排序数组 (Ts版)
  • 【STM32】HAL库Host MSC读写外部U盘及FatFS文件系统的USB Disk模式
  • docker nginx 配置文件详解
  • 如何实现华为云+deepseek?
  • 【学习笔记】计算机网络(三)
  • 稀土抑烟剂——为汽车火灾安全增添防线
  • Qt Pro、Pri、Prf
  • 基于AIOHTTP、Websocket和Vue3一步步实现web部署平台,无延迟控制台输出,接近原生SSH连接
  • 如何在MacOS上查看edge/chrome的扩展源码
  • 【xdoj-离散线上练习H】T234(C++)