首页 运维干货Elasticsearch是怎么进行分词的?

Elasticsearch是怎么进行分词的?

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

搜索引擎这篇文章中写道,搜索引擎中有一个分词,切词的步骤,就是使用Analyzer来实现的。这篇文章将对Analyzer分词器进行铺开讲解。

Analysis与Analyzer分词器

  • Analysis - 文本分析是把全文本转换一系列单词 (term/token)的过程,也叫分词
  • Analysis 是 通过 Analyzer来实现的
    • 可使用 Elasticsearch 内置的分析器/或者按需定制化分析器
  • 除了在数据写入时转换词条,匹配 Query 语句时候也需要用相同的分析器对查询语句进行分析

Elasticsearch是怎么进行分词的?插图

Analyzer的组成

  • 分词器是专门处理分词的组件,Analyzer 由三部分组成,分别入下:
  1. Character Filters :针对原始文本处理,例如去除html
  2. Tokenizer:按照原则切分为单词
  3. Token Filter:将切分的单词进行加工,将单词从大写转换为小写,删除 stopwords,增加同义词

Elasticsearch是怎么进行分词的?插图(1)

Elasticsearch内置的分词器

  • Standard Analyzer:默认分词器,按词切分,小写处理
  • Simple Analyzer:按照非字母切分(符号被过滤),小写处理
  • Stop Analyzer:小写处理,停用词过滤(the, a, is)
  • Whitespace Analyzer:按照空格切分,不转小写
  • Keyword Analyzer:不分词,直接将输入当做输出
  • Patter Analyzer:正则表达式,默认 \W+ (非字符分割)
  • Language:提供共了30多种常见语言的分词器
  • Customer Analyzer:自定义分词器

_analyzer API简单介绍

关于Analyzer的几种用法如下

Standard Analyzer分词器

Elasticsearch是怎么进行分词的?插图(2)
上面又讲到 Standard Analyzer是Elasticsearch默认的分词器,按词切分,主要是按照词汇空格去切分,然后转小写处理

实例

结果如下
运行结果可以看到,我们的text都被拆分成了一个个单词,并进行转小写处理
Elasticsearch是怎么进行分词的?插图(3)

Simple Analyzer分词器

simple analyzer分词器按非字母划分,非字母的都被去掉,并且进行转小写处理。
Elasticsearch是怎么进行分词的?插图(4)
实例

上面的测试,下面效果可以看到,Simple会把非字母的都去掉,3 running 中的 3 已经被去掉了,然后再进行了一个转小写处理
Elasticsearch是怎么进行分词的?插图(5)

Stop Analyzer

Stop Analyzer分词器会将文本进行转小写处理,然后过滤掉停用词(the, a, is...)
Elasticsearch是怎么进行分词的?插图(6)

实例

运行结果如下图所示,将所有文本进行了转小写处理,然后过滤掉了停用词 (3 in the)
Elasticsearch是怎么进行分词的?插图(7)

Whitespace Analyzer分词

Whitespace分词器是按照空格切分,然后不转小写
Elasticsearch是怎么进行分词的?插图(8)

实例

可以看到如下图所示,按照空格拆分后的文本,没有进行小写转换
Elasticsearch是怎么进行分词的?插图(9)

Keyword Analyzer 分词

keyword即不会进行分词,而是按照源文本信息当做输出
Elasticsearch是怎么进行分词的?插图(10)

实例

可以看到如下图所示,没有拆分字符,也没有转小写处理和停用词过滤,而是按照源文件信息输出
Elasticsearch是怎么进行分词的?插图(11)

Pattern Analyzer分词

Patter Analyzer是通过正则表达式进行分词,默认是 \W+ ,非字符的符号进行分割。
Elasticsearch是怎么进行分词的?插图(12)

实例

可以看到如下图所示,pattern analyzer对非字符的符号进行了分割,然后进行了转小写处理,我们文本中的 中华 人民 共 和国brown-foxes中的 - 连接符,不是字符,所以pattern对他们进行了分割。

Elasticsearch是怎么进行分词的?插图(13)

Language Analyzer

Elasticsearch为不同国家语言的输入提供了Language Analyzer的一个分词器
我们可以在其中指定分词的语言来进行分词

实例

如下图所示运行结果,由 english 来进行分词后,把 running 转换成了 run,然后foxes转换为了 foxevening转换为了 even,还把所有的词转换为了小写,并有停用词过滤功能,把 in the 过滤掉了

Elasticsearch是怎么进行分词的?插图(14)

ICU Analyzer

ICU Analyzer需要通过插件的形式获取
ICU ANalyzer提供了 Unicode 的支持,更好的支持亚洲语言,所以在中文分词上ICU Analyzer用的比较普遍
./elasticsearch-plugin install analysis-icu
安装完成后重启Elasticsearch后查看插件

Elasticsearch是怎么进行分词的?插图(15)

实例

标准的_analyze运行结果如下,标准的_analyze分词器是把每个词单独分开了
Elasticsearch是怎么进行分词的?插图(16)

分词结果如下,说的和确实放在了一起,要比其它分词器好多了
Elasticsearch是怎么进行分词的?插图(17)

IK 中文分词器

IK中文分词器支持自定义词库,支持热更新分词字典
IK分词器项目地址:https://github.com/medcl/elasticsearch-analysis-ik
IK分词器版本地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

1.安装IK分词器

2.安装完成后需要重启Elasticsearch
重启过程略

3.查看插件

4.实例
自 IK分词插件v5.0.0 起移除名为 ik 的analyzer和tokenizer,请分别使用 ik_smart 和 ik_max_word。

Elasticsearch是怎么进行分词的?插图(18)

本文链接:http://www.yunweipai.com/34589.html

网友评论comments

发表评论

电子邮件地址不会被公开。

暂无评论

Copyright © 2012-2020 YUNWEIPAI.COM - 运维派
扫二维码
扫二维码
返回顶部