一、分词器的作用
分词器(Analyzer)是Elasticsearch中用于文本分析与处理的组件。它的主要作用是将用户输入的一段文本,按照一定逻辑分析成多个词语。这个过程也叫做文本分析或文本切分。
二、分词器的构成
分词器由三部分组成:字符过滤器(Character Filters)、分词器(Tokenizer)和标记过滤器(Token Filters)。
- 字符过滤器:接收原字符流,通过添加、删除或者替换操作改变原字符流。例如,去除文本中的HTML标签,或者将罗马数字转换成阿拉伯数字等。
- 分词器:将文本切分为单个或多个分词。它是文本分析的核心部分,负责将文本拆分成词语。
- 标记过滤器:对分词后的结果进行过滤和处理。例如,将所有英文单词小写化,或者删除英文中的停用词等。
三、分词器的使用
在Elasticsearch中,分词器可以在创建索引和搜索时使用。
- 创建索引时:当索引文档字符类型为text时,在建立索引时将会对该字段进行分词。此时,可以按照以下顺序确定使用哪个分词器:
- 先判断字段是否有设置分词器,如果有,则使用字段属性上的分词器设置。
- 如果设置了analysis.analyzer.default,则使用该设置的分词器。
- 如果上面两个都未设置,则使用默认的standard分词器。
- 搜索时:当对一个text类型的字段进行全文检索时,会对用户输入的文本进行分词。此时,可以通过以下参数依次检查搜索时使用的分词器:
- 搜索时指定analyzer参数。
- 创建mapping时指定字段的search_analyzer属性。
- 创建索引时指定setting的analysis.analyzer.default_search。
- 如果上面几种都未设置,则使用默认的standard分词器。
四、内置分词器与自定义分词器
Elasticsearch提供了多种内置分词器,如标准分词器(Standard Analyzer)、语言分词器(如中文分词器)等。这些分词器可以根据不同的需求进行选择和配置。
同时,Elasticsearch也支持自定义分词器。用户可以根据自己的需求编写分词器,实现自定义的拆分规则和词语处理逻辑。自定义分词器需要编写自己的分词器和字符过滤器,并在Elasticsearch中注册分词器。
1、内置分词器
- 标准分词器(Standard Analyzer)
- Elasticsearch的默认分词器。
- 根据空格和标点符号将文本拆分为词项,并进行小写转换和标点符号过滤。
- 适用于大多数情况,但对中文文本的支持不够理想。
- 简单分词器(Simple Analyzer)
- 通过非字母字符来分割文本。
- 将单词转换为小写形式,并去除数字类型的字符。
- 适用于简单的文本处理需求,不适用于需要处理复杂文本的场景。
- 空白分词器(Whitespace Analyzer)
- 仅通过空格来分割文本,不进行其他处理。
- 适用于需要保留原始文本的场景。
- 关键字分词器(Keyword Analyzer)
- 不对文本进行拆分,将整个文本作为一个词项。
- 通常用于不需要进行分词的字段,如关键字字段或精确匹配字段。
- 模式分词器(Pattern Analyzer)
- 允许用户自定义拆分模式,通过正则表达式来定义Token的拆分规则。
- 适用于需要灵活控制文本拆分的场景。
- 停止词分词器(Stop Analyzer)
- 与简单分词器类似,但增加了对删除停止词的支持。
- 默认使用英语停止词列表,如"the"、"a"、"an"等。
- 语言分词器
- Elasticsearch还提供了多种针对特定语言的分词器,如英语、中文、法语等。
- 这些分词器会根据特定的语言规则和特征进行分词处理,以提供更准确的分词效果。
2、第三方分词器
- IK分词器
- 一个开源的、基于Java语言开发的中文分词工具包。
- 提供了两种分词算法:ik_smart(最少切分)和ik_max_word(最细粒度划分)。
- 支持词库扩展和自定义词典,适用于对中文文本的更精确分词和分析需求。
- Smart Chinese Analyzer(smartcn)
- Elasticsearch内置的中文分词器。
- 使用机器学习算法进行分词,适用于简体中文和繁体中文。
- 易于使用,无需额外配置,具有较高的分词准确性和召回率。
- 拼音分词器
- 可以将中文分成对应的全拼、全拼首字母等。
- 在搜索框中输入拼音时,可以出现对应的目标结果。
3、自定义分词器
用户还可以根据自己的需求编写自定义分词器,实现自定义的拆分规则和词语处理逻辑。自定义分词器需要编写自己的分词器和字符过滤器,并在Elasticsearch中注册分词器。
五、分词器的安装与配置
在Elasticsearch中,分词器通常是以插件的形式进行安装的。用户可以从相应分词插件的官网或git上下载插件包,然后将其上传到Elasticsearch集群所在的节点,并使用命令进行安装。安装完成后,还需要重启Elasticsearch服务以使分词插件生效。
在配置分词器时,用户可以在创建索引时指定分词器的相关设置,包括字符过滤器、分词器和标记过滤器等。
六、分词示例
以IK分词器为例,IK分词器是Elasticsearch的一个中文分词插件,它提供了多种分词模式供用户选择。以下是一个使用IK分词器的示例:
shell
GET _analyze/?pretty
{
"analyzer": "ik_smart",
"text": "庆祝祖国六十岁生日快乐"
}
返回结果中,分词器将传入的text文本分割为了若干个词汇短语,如"庆祝"、"祖国"、"六十岁"等。