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文本分割为了若干个词汇短语,如"庆祝"、"祖国"、"六十岁"等。

相关推荐
梧桐树04293 小时前
python常用内建模块:collections
python
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
woshiabc1114 小时前
windows安装Elasticsearch及增删改查操作
大数据·elasticsearch·搜索引擎
蓝天星空5 小时前
Python调用open ai接口
人工智能·python
jasmine s5 小时前
Pandas
开发语言·python
郭wes代码5 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
leaf_leaves_leaf5 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零15 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
404NooFound5 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
天天要nx5 小时前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest