ElasticSearch – Analyzer 文本分析器

  • Post author:
  • Post category:其他


一、关于


  • 1、概念相关

文本分析是将非结构化文本转换为结构化格式,以便于搜索的过程

文本分析器使 ElasticSearch 能够执行全文检索,返回所有相关的结果,而不仅仅是精确的匹配


  • 2、组成部分

文本分析器由 字符过滤器、分词器、词项过滤器 三个构建块组成



字符过滤器(character filters)

接收原始文本,并对文本进行过滤处理,如处理文本中的html标签字符或将罗马数字转换成阿拉伯数字等,处理完后再交给分词器进行分词。一个文本分析器中可包含0个或多个字符过滤器,将按配置顺序依次进行处理



分词器(tokenizer)

接收一个字符流,并将文本分解成词项,然后输出一个词项流。一个文本分析器必需且只能包含一个分词器



词项过滤器(token filters)

接收词项流,并对词项流进行过滤处理,如转小写、停用词处理、同义词处理等。一个文本分析器中可包含0个或多个字符过滤器,将按配置顺序依次进行处理


  • 3、作用时间

文本分析器会作用在 建立索引 和 全文检索 两个地方



建立索引时

当对一个文档建立索引时,会对文档的所有text类型字段的文本进行分析(分词)



全文检索时

当对一个text类型的字段进行全文检索时,会对用户输入的文本进行分析(分词)

二、分析器确认使用步骤


  • 索引分析器

建立索引时,通过依次检查以下参数,来确定对文本字段要使用的分析器

如果映射索引时设置了 field 的 analyzer 参数,则使用该参数设置的分词器

如果创建索引时设置了 setting 的 analysis.analyzer.default 参数,则使用该参数设置的分词器

如果以上都没有设置,则使用默认的 standard 分词器


  • 检索分析器

全文检索时,通过依次检查以下参数,来确定对查询文本要使用的分析器

如果查询语句中指定了 analyzer 参数,则检索时使用此参数指定的分词器

如果映射索引时设置了 field 的 search_analyzer 参数,则检索时使用此参数指定的分词器

如果创建索引时设置了 setting 的 analysis.analyzer.default_search 参数,则检索时使用此参数指定的分词器

如果映射索引时设置了 field 的 analyzer 参数,则检索时使用此参数指定的分词器

如果以上都没有设置,则使用默认的 standard 分词器

三、内置分析器

在 ElasticSearch 中,内置了多种分析器,无需额外配置即可直接用于索引或搜索


  • 标准分析器(Standard Analyzer)

默认的分析器。将文本基于 Unicode 文本分割算法做分词,适用于大多数语言,中文会被单字分割


  • 简单分词器(Simple Analyzer)

将文本在任何非字母中文等语言字符处分词,如数字、空格、连字符和括号等,丢弃非字母字符并改变大写字母为小写


  • 关键词分词器(Keyword Analyzer)

将整个输入的文本作为一个词项返回,不做任何处理


  • 空白分析器(Whitespace Analyzer)

将文本在空格字符处分词


  • 停用词分析器(Stop Analyzer)

基于简单分词器而添加了对停用词支持的分析器,默认使用 _english_停用词表

四、中文分词器

内置的分词器对中文分词并不友好,可以使用第三方的 Analyzer 插件,比如 ik、pinyin 等

以 ik 为例,到

elasticsearch-analysis-ik

下载对应版本编译好的包,解压到 ES_HOME/plugins/analysis-ik 即可

在 ik 中,包含 ik_max_word 和 ik_smart 两种分词模式。ik_smart 会执行较粗粒度的分词,ik_max_word 会执行更细粒度的分词

五、分词器测试

通过 _analyze 接口,可以测试分析器的分词效果

GET /_analyze
{
    "analyzer": "standard",
    "text": "测试ElasticSearch不同分析器的分词效果"
}
// ----------------------------------------------------------
GET /_analyze
{
    "analyzer": "ik_max_word",
    "text": "测试ElasticSearch不同分析器的分词效果"
}



版权声明:本文为u013379717原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。