深入理解ElasticSearch分词器:详解各种分词器的原理与应用

devtools/2024/11/16 5:20:51/

目录

  • 什么是分词器
  • ElasticSearch中的分词器种类
  • 标准分词器(Standard Analyzer)
  • 简单分词器(Simple Analyzer)
  • 空格分词器(Whitespace Analyzer)
  • 语言分词器(Language Analyzers)
  • 拼音分词器(Pinyin Analyzer)
  • 中文分词器(IK分词器)
  • 自定义分词器
  • 如何选择合适的分词器
  • 总结

什么是分词器

在搜索引擎中,分词器的作用是将一段文本分解为若干个词语或词组,称为“词项”(token),并去除掉不必要的标点、空格等符号,从而将文本处理为更适合检索的结构化数据。在ElasticSearch中,分词器(Analyzer)通常由以下三部分组成:

  1. 字符过滤器(Character Filter):首先对文本进行预处理,如移除HTML标签、替换特定字符等。
  2. 分词器(Tokenizer):将预处理后的文本分解为一个个词项(token)。
  3. 词项过滤器(Token Filter):对词项进一步处理,如转换大小写、移除停用词、词干还原等。

ElasticSearch提供了多种内置分词器,适用于不同的语言和应用场景。此外,ElasticSearch支持自定义分词器,以满足特定需求。


ElasticSearch中的分词器种类

ElasticSearch提供了多种分词器,每种分词器的分词逻辑和适用场景不同。常见的分词器包括:

  1. 标准分词器(Standard Analyzer)
  2. 简单分词器(Simple Analyzer)
  3. 空格分词器(Whitespace Analyzer)
  4. 语言分词器(Language Analyzers)
  5. 拼音分词器(Pinyin Analyzer)
  6. 中文分词器(IK分词器)
  7. 自定义分词器

在以下章节中,我们将详细介绍每种分词器的特点、使用方法及应用场景。


标准分词器(Standard Analyzer)

标准分词器是ElasticSearch的默认分词器,基于Lucene的标准分析器。该分词器适用于大多数西方语言,如英文、法文等。标准分词器的处理流程如下:

  1. 字符过滤:处理文本中的HTML标签、特殊字符等。
  2. 分词:将文本分解为一个个单词,以空格、标点等作为分隔符。
  3. 词项过滤:移除停用词(如“the”、“is”等),并将词项转换为小写。

示例

假设我们有以下文本:

The quick brown fox jumps over the lazy dog.

使用标准分词器后的结果为:

[the, quick, brown, fox, jumps, over, the, lazy, dog]

可以看到,标准分词器移除了标点符号,并将所有单词转换为小写。标准分词器适用于大多数英文文档的索引和搜索。


简单分词器(Simple Analyzer)

简单分词器是一种较为基础的分词器,其分词过程较为简单,主要基于非字母字符(如空格、标点符号等)进行分词。与标准分词器不同,简单分词器不会过滤停用词。

特点

  • 基于非字母字符进行分词。
  • 所有词项转换为小写。
  • 不进行停用词过滤。

示例

给定文本:

The quick brown fox jumps over the lazy dog.

使用简单分词器后的结果为:

[the, quick, brown, fox, jumps, over, the, lazy, dog]

简单分词器适用于不需要复杂分词逻辑的应用场景。


空格分词器(Whitespace Analyzer)

空格分词器仅基于空格进行分词,不会移除停用词或进行大小写转换。因此,空格分词器适用于那些已经规范化的文本数据,如标签、代码片段等。

特点

  • 基于空格进行分词。
  • 不进行大小写转换和停用词过滤。

示例

给定文本:

The quick brown fox jumps over the lazy dog.

使用空格分词器后的结果为:

[The, quick, brown, fox, jumps, over, the, lazy, dog]

空格分词器适用于一些不希望分词器对文本做过多处理的场景。


语言分词器(Language Analyzers)

语言分词器是ElasticSearch针对不同语言定制的分词器。这些分词器考虑了各语言的特性,能够更准确地分解文本。ElasticSearch提供了多种语言分词器,包括英文、法文、德文、西班牙文等。

特点

  • 根据特定语言的特点进行分词。
  • 支持语言的停用词过滤和词干还原。

示例

假设我们使用英文分词器(English Analyzer)处理以下文本:

running jumps

使用英文分词器后的结果为:

[run, jump]

可以看到,英文分词器进行了词干还原,将“running”还原为“run”。语言分词器适用于多语言文档的处理,可以根据文本语言选择对应的分词器。


拼音分词器(Pinyin Analyzer)

拼音分词器是一种专为中文拼音搜索而设计的分词器。它可以将汉字转化为拼音,从而支持拼音搜索。这在需要通过拼音进行检索的场景中非常有用,如拼音输入法联想、拼音查询等。

特点

  • 将汉字转换为拼音。
  • 支持全拼、首字母等多种拼音模式。

示例

假设我们有以下中文文本:

北京

使用拼音分词器后的结果可能为:

[bei, jing, bj]

拼音分词器适用于那些需要支持拼音搜索的中文应用,如用户在不记得准确汉字拼写时可以通过拼音检索相关信息。


中文分词器(IK分词器)

IK分词器是ElasticSearch中常用的中文分词插件之一。中文的分词复杂度较高,因为中文没有明确的分隔符,通常需要借助词典进行分词。IK分词器提供了细粒度分词和智能分词两种模式:

  • 细粒度分词:将句子尽可能细地分解为每一个词项。
  • 智能分词:基于词典的分词算法,选择最合理的分词结果。

特点

  • 支持细粒度和智能分词模式。
  • 可通过自定义词典扩展词汇。

示例

给定中文文本:

我是中国人

使用IK分词器(智能分词模式)后的结果为:

[我, 是, 中国人]

IK分词器适用于中文全文搜索,可以提供较为准确的分词结果,适合中文文本的索引和搜索。


自定义分词器

ElasticSearch支持用户自定义分词器,以满足特殊的分词需求。自定义分词器允许用户组合字符过滤器、分词器和词项过滤器,构建一个定制化的分词方案。

示例:创建一个自定义分词器

PUT /my_index
{"settings": {"analysis": {"analyzer": {"custom_analyzer": {"type": "custom","tokenizer": "whitespace","filter": ["lowercase", "stop"]}}}}
}

以上配置定义了一个基于空格分词的小写化、并去除停

用词的自定义分词器。


如何选择合适的分词器

选择分词器时,需要考虑文本的语言、应用场景、搜索需求等因素。以下是几种常见的选择思路:

  • 英文或西方语言文档:标准分词器或对应语言的分词器。
  • 中文文档:IK分词器、HanLP分词器等中文分词插件。
  • 拼音搜索:拼音分词器。
  • 代码、标签等特殊文本:空格分词器。
  • 特殊需求:自定义分词器。

总结

ElasticSearch中的分词器为文本处理提供了丰富的选择。了解和选择合适的分词器,能够提升ElasticSearch的搜索准确性和性能。在实际应用中,根据具体需求选用分词器,或结合多种分词技术,能够实现更优的搜索效果。


http://www.ppmy.cn/devtools/134349.html

相关文章

wordcloud库基本介绍

文章目录 wordcloud库概述wordcloud库的安装 wordcloud库使用说明配置对象参数 wordcloud应用实例实例: 政府工作报告词云 wordcloud库概述 wordcloud是优秀的词云展示第三方库 词云以词语为基本单位,更加直观和艺术地展示文本 wordcloud库的安装 (cmd命令行) pip install …

使用Git工具在GitHub的仓库中上传文件夹(超详细)

如何使用Git工具在GitHub的仓库中上传文件夹? 如果觉得博主写的还可以,点赞收藏关注噢~ 第一步:拥有一个本地的仓库 可以fork别人的仓库或者自己新创建 fork别人的仓库 或者自己创建一个仓库 按照要求填写完成后,点击按钮创建…

单元测试、集成测试、系统测试、验收测试、压力测试、性能测试、安全性测试、兼容性测试、回归测试(超详细的分类介绍及教学)

目录 1.单元测试 实现单元测试的方法: 注意事项: 2.集成测试 需注意事项: 实现集成测试的方法: 如何实现高效且可靠的集成测试: 3.系统测试 实现系统测试的方法: 须知注意事项: 4.验收测试 实现验…

SQL面试题——蚂蚁SQL面试题 连续3天减少碳排放量不低于100的用户

连续3天减少碳排放量不低于100的用户 这是一道来自蚂蚁的面试题目,要求我们找出连续3天减少碳排放量低于100的用户,之前我们分析过两道关于连续的问题了 SQL面试题——最大连续登陆问题 SQL面试题——球员连续四次得分 这两个问题都是跟连续有关的,但是球员连续得分的难…

Vue3 - 小兔仙 - day3

0.学习大纲 1.Home模块 静态结构搭建和分类实现 整体结构创建 按照结构新增五个组件&#xff0c;准备最简单的模版&#xff0c;分别在Home模块的入口组件中引入 HomeCategory HomeBanner HomeNew HomeHot HomeProduct 在组件中添加简单模版 <script setup> <…

解析安卓镜像包和提取DTB文件的操作日志

概述 想查看一下安卓的镜像包里都存了什么内容 步骤 使用RKDevTool_v3.15对RK3528_DC_HK1_RBOX_K8_Multi_WIFI_13_20230915.2153.img解包 路径: 高级(Advancing) > 固件(firmware) > 解包(unpacking)得到\Output\Android\Image boot.imguboot.imgsuper.img 处理boot.…

前端人之网络通信概述

前端人之网络通信概述 介绍网络七层模型物理层链路层网络层传输层应用层 介绍 互联网的核心技术就是一系列协议&#xff0c;总称“互联网协议”&#xff0c;对电脑如何连接和组网作出详细的规定&#xff0c;理解了这些协议就理解了互联网的原理。 网络七层模型 互联网完成数…

Kafka节点服役和退役

1 服役新节点 1&#xff09;新节点准备 &#xff08;1&#xff09;关闭 bigdata03&#xff0c;进行一个快照&#xff0c;并右键执行克隆操作。 &#xff08;2&#xff09;开启 bigdata04&#xff0c;并修改 IP 地址。 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改完…