Elasticsearch 分词器

一、分词器的作用

分词器(Analyzer)是Elasticsearch中用于文本分析与处理的组件。它的主要作用是将用户输入的一段文本,按照一定逻辑分析成多个词语。这个过程也叫做文本分析或文本切分。

二、分词器的构成

分词器由三部分组成:字符过滤器(Character Filters)、分词器(Tokenizer)和标记过滤器(Token Filters)。

  1. 字符过滤器:接收原字符流,通过添加、删除或者替换操作改变原字符流。例如,去除文本中的HTML标签,或者将罗马数字转换成阿拉伯数字等。
  2. 分词器:将文本切分为单个或多个分词。它是文本分析的核心部分,负责将文本拆分成词语。
  3. 标记过滤器:对分词后的结果进行过滤和处理。例如,将所有英文单词小写化,或者删除英文中的停用词等。

三、分词器的使用

在Elasticsearch中,分词器可以在创建索引和搜索时使用。

  1. 创建索引时:当索引文档字符类型为text时,在建立索引时将会对该字段进行分词。此时,可以按照以下顺序确定使用哪个分词器:
    • 先判断字段是否有设置分词器,如果有,则使用字段属性上的分词器设置。
    • 如果设置了analysis.analyzer.default,则使用该设置的分词器。
    • 如果上面两个都未设置,则使用默认的standard分词器。
  2. 搜索时:当对一个text类型的字段进行全文检索时,会对用户输入的文本进行分词。此时,可以通过以下参数依次检查搜索时使用的分词器:
    • 搜索时指定analyzer参数。
    • 创建mapping时指定字段的search_analyzer属性。
    • 创建索引时指定setting的analysis.analyzer.default_search。
    • 如果上面几种都未设置,则使用默认的standard分词器。

四、内置分词器与自定义分词器

Elasticsearch提供了多种内置分词器,如标准分词器(Standard Analyzer)、语言分词器(如中文分词器)等。这些分词器可以根据不同的需求进行选择和配置。

同时,Elasticsearch也支持自定义分词器。用户可以根据自己的需求编写分词器,实现自定义的拆分规则和词语处理逻辑。自定义分词器需要编写自己的分词器和字符过滤器,并在Elasticsearch中注册分词器。

1、内置分词器

  1. 标准分词器(Standard Analyzer)
    • Elasticsearch的默认分词器。
    • 根据空格和标点符号将文本拆分为词项,并进行小写转换和标点符号过滤。
    • 适用于大多数情况,但对中文文本的支持不够理想。
  2. 简单分词器(Simple Analyzer)
    • 通过非字母字符来分割文本。
    • 将单词转换为小写形式,并去除数字类型的字符。
    • 适用于简单的文本处理需求,不适用于需要处理复杂文本的场景。
  3. 空白分词器(Whitespace Analyzer)
    • 仅通过空格来分割文本,不进行其他处理。
    • 适用于需要保留原始文本的场景。
  4. 关键字分词器(Keyword Analyzer)
    • 不对文本进行拆分,将整个文本作为一个词项。
    • 通常用于不需要进行分词的字段,如关键字字段或精确匹配字段。
  5. 模式分词器(Pattern Analyzer)
    • 允许用户自定义拆分模式,通过正则表达式来定义Token的拆分规则。
    • 适用于需要灵活控制文本拆分的场景。
  6. 停止词分词器(Stop Analyzer)
    • 与简单分词器类似,但增加了对删除停止词的支持。
    • 默认使用英语停止词列表,如"the"、"a"、"an"等。
  7. 语言分词器
    • Elasticsearch还提供了多种针对特定语言的分词器,如英语、中文、法语等。
    • 这些分词器会根据特定的语言规则和特征进行分词处理,以提供更准确的分词效果。

2、第三方分词器

  1. IK分词器
    • 一个开源的、基于Java语言开发的中文分词工具包。
    • 提供了两种分词算法:ik_smart(最少切分)和ik_max_word(最细粒度划分)。
    • 支持词库扩展和自定义词典,适用于对中文文本的更精确分词和分析需求。
  2. Smart Chinese Analyzer(smartcn)
    • Elasticsearch内置的中文分词器。
    • 使用机器学习算法进行分词,适用于简体中文和繁体中文。
    • 易于使用,无需额外配置,具有较高的分词准确性和召回率。
  3. 拼音分词器
    • 可以将中文分成对应的全拼、全拼首字母等。
    • 在搜索框中输入拼音时,可以出现对应的目标结果。

3、自定义分词器

用户还可以根据自己的需求编写自定义分词器,实现自定义的拆分规则和词语处理逻辑。自定义分词器需要编写自己的分词器和字符过滤器,并在Elasticsearch中注册分词器。

五、分词器的安装与配置

在Elasticsearch中,分词器通常是以插件的形式进行安装的。用户可以从相应分词插件的官网或git上下载插件包,然后将其上传到Elasticsearch集群所在的节点,并使用命令进行安装。安装完成后,还需要重启Elasticsearch服务以使分词插件生效。

在配置分词器时,用户可以在创建索引时指定分词器的相关设置,包括字符过滤器、分词器和标记过滤器等。

六、分词示例

以IK分词器为例,IK分词器是Elasticsearch的一个中文分词插件,它提供了多种分词模式供用户选择。以下是一个使用IK分词器的示例:

shell 复制代码
GET _analyze/?pretty
{
  "analyzer": "ik_smart",
  "text": "庆祝祖国六十岁生日快乐"
}

返回结果中,分词器将传入的text文本分割为了若干个词汇短语,如"庆祝"、"祖国"、"六十岁"等。

相关推荐
飞猪~28 分钟前
Langchain python版本 LLM 重要函数invoke,ainvoke,stream,astream,batch,abatch
python·langchain·batch
沙蒿同学1 小时前
当古诗词遇上 AI:从 38 万句诗词中取一个好名字
python·算法·架构
xxie1237941 小时前
Python装饰器与语法糖
开发语言·python
CClaris2 小时前
大模型量化从0到1(五):GPTQ 原理详解 + 从零量化一个真实大模型
人工智能·python·算法·机器学习
Railshiqian2 小时前
UserPickerActivity 内部逻辑分析
开发语言·python
一tiao咸鱼2 小时前
前端转 agent # 02 - FastAPI 框架入门与原理
前端·python
Yolo566Q2 小时前
Noah-MP陆面过程模型建模方法与站点、区域模拟实践技术应用
开发语言·python
肖永威3 小时前
麒麟 V10 编译 Python 3.11 依赖包缺失与版本冲突问题解决实录
运维·python·麒麟操作系统
Csvn3 小时前
Python 开发技巧 · 类型注解进阶 —— 从 `TypeVar` 到 `Protocol`,让类型检查真正帮你抓 bug
后端·python
W是笔名3 小时前
python___容器类型的数据___列表
开发语言·windows·python