Elasticsearch中的切词怎么实现的?

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

Analysis与Analyzer分词器

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

Elasticsearch中的切词怎么实现的?### Analyzer的组成

•分词器是专门处理分词的组件,Analyzer 由三部分组成,分别入下:

1.Character Filters :针对原始文本处理,例如去除html2.Tokenizer:按照原则切分为单词3.Token Filter:将切分的单词进行加工,将单词从大写转换为小写,删除 stopwords,增加同义词

Elasticsearch中的切词怎么实现的?### Elasticsearch内置的分词器

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

_analyzer API简单介绍

关于Analyzer的几种用法如下


//指定analyzer进行测试

GET _analyze

{

  analyzer: standard,                           #指定Analyzer分词器

  text : Mastering Elasticsearch, elasticsearch in Action       #使用分词器要拆分的文本

}

//指定索引字段进行测试Analyzer

POST bulk_index/_analyze                            #对指定的索引进行分词器拆分

{   

  field: title,                                 #标题

  text: Mastering Elasticsearch                 #要拆分的文本

}

//自定义分词器进行测试

POST _analyze

{

  tokenizer: standard,                          

  filter: [lowercase],

  text: Mastering Elasticsearch

}

### Standard Analyzer分词器

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025774-c70921bb2865b33.png "Elasticsearch中的切词怎么实现的?")上面又讲到 Standard Analyzer是Elasticsearch默认的分词器,按词切分,主要是按照词汇空格去切分,然后转小写处理

**实例**

//standard

GET _analyze

{

analyzer: standard, //指定分词器

text: 3 running Quick brown-foxes leap over lazy dogs in the summer evening. //要拆分的文本

}


**结果如下** 运行结果可以看到,我们的text都被拆分成了一个个单词,并进行转小写处理

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025775-3f2121eac1e8200.png "Elasticsearch中的切词怎么实现的?")### Simple Analyzer分词器

simple analyzer分词器按非字母划分,非字母的都被去掉,并且进行转小写处理。

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025776-8d87083bad3762e.png "Elasticsearch中的切词怎么实现的?")**实例**

//Simple

GET _analyze

{

analyzer: simple,

text: 3 running Quick brown-foxes leap over lazy dogs in the summer evening.

}


上面的测试,下面效果可以看到,Simple会把非字母的都去掉,`3 running` 中的 3 已经被去掉了,然后再进行了一个转小写处理

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025776-e7b4d687f5c921a.png "Elasticsearch中的切词怎么实现的?")

### Stop Analyzer

Stop Analyzer分词器会将文本进行转小写处理,然后过滤掉停用词(the, a, is...)

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025778-1b608dc9235b01b.png "Elasticsearch中的切词怎么实现的?")**实例**

//Stop

GET _analyze

{

analyzer: stop,

text: 3 running Quick brown-foxes leap over lazy dogs in the summer evening.

}


运行结果如下图所示,将所有文本进行了转小写处理,然后过滤掉了停用词 (3 in the)

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025779-a4ac2572336a704.png "Elasticsearch中的切词怎么实现的?")### Whitespace Analyzer分词

Whitespace分词器是按照空格切分,然后不转小写

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025780-56fda3c99ac8611.png "Elasticsearch中的切词怎么实现的?")**实例**

//whitespace

GET _analyze

{

analyzer: whitespace,

text: 中华 人民 共 和国 3 running Quick brown-foxes leap over lazy dogs in the summer evening.

}


可以看到如下图所示,按照空格拆分后的文本,没有进行小写转换

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025781-96b2546910d2d70.png "Elasticsearch中的切词怎么实现的?")### Keyword Analyzer 分词

keyword即不会进行分词,而是按照源文本信息当做输出

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025782-c9e1be3b3bdb350.png "Elasticsearch中的切词怎么实现的?")**实例**

//Keyword

GET _analyze

{

analyzer: keyword,

text: 中华 人民 共 和国 3 running Quick brown-foxes leap over lazy dogs in the summer evening.

}


可以看到如下图所示,没有拆分字符,也没有转小写处理和停用词过滤,而是按照源文件信息输出

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025782-dd4e8472d2e6bcc.png "Elasticsearch中的切词怎么实现的?")### Pattern Analyzer分词

Patter Analyzer是通过正则表达式进行分词,默认是 W+ ,非字符的符号进行分割。

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025783-c64166504eff6bb.png "Elasticsearch中的切词怎么实现的?")**实例**

//Pattern

GET _analyze

{

analyzer: pattern,

text: 中华 人民 共 和国 3 running Quick brown-foxes leap over lazy dogs in the summer evening.

}


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

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025783-2752c79357b3588.png "Elasticsearch中的切词怎么实现的?")

### Language Analyzer

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

**实例**

//Language

GET _analyze

{

analyzer: english,

text: 3 running Quick brown-foxes leap over lazy dogs in the summer evening.

}


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

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025785-5c3f8cff86468a3.png "Elasticsearch中的切词怎么实现的?")

### ICU Analyzer

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

curl -XGET ‘http://192.168.31.215:9201/_cat/plugins?v

name component version

elastic_node1 analysis-icu 7.4.0


![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025786-05a61df11b81d21.png "Elasticsearch中的切词怎么实现的?")**实例**

//我们先看标准的 _analyze

GET _analyze

{

analyzer: standard,

text: 他说的却是在理!

}


标准的_analyze运行结果如下,标准的_analyze分词器是把每个词单独分开了

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025787-61b582221c7d9fd.png "Elasticsearch中的切词怎么实现的?")- 

//icu_analyzer我们再来看icu_analyzer

GET _analyze

{

analyzer: icu_analyzer,

text: 他说的确实在理!

}


分词结果如下,说的和确实放在了一起,要比其它分词器好多了

![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025789-90d8d5b1e38d5d8.png "Elasticsearch中的切词怎么实现的?")### IK 中文分词器

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

**1.安装IK分词器**

方法一在线安装:

使用elastic用户来进行安装

安装的IK分词器版本要和Elasticsearch版本一致

[elastic@elastic elastic_node1]$ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.0/elasticsearch-analysis-ik-7.4.0.zip

方法二离线安装:

[elastic@elastic elastic_node1]$ mkdir plugins/analysis-ik

[elastic@elastic elastic_node1]$ cd plugins/analysis-ik

然后将下载的zip包解压到analysis-ik目录即可

[elastic@elastic analysis-ik]$ unzip -o elasticsearch-analysis-ik-7.4.0.zip -d /usr/local/elastic_node1/plugins/analysis-ik/


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

**3.查看插件**

[root@elastic elastic_node1]# curl -XGET -u elastic:26tBktGolYCyZD2pPISW ‘http://192.168.31.215:9201/_cat/plugins?v

name component version

elastic_node1 analysis-icu 7.4.0

elastic_node1 analysis-ik 7.4.0


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

//ik_max_word

GET _analyze

{

analyzer: ik_max_word,

text: 他说的确实在理!

}

//ik_smart

GET _analyze

{

analyzer: ik_smart,

text: 他说的确实在理!

}



![Elasticsearch中的切词怎么实现的?](https://www.94zyw.com/wp-content/uploads/2020/06/1592025790-73f1c20a970b7f8.png "Elasticsearch中的切词怎么实现的?")
1. 本站所有资源来源于用户上传和网络,如有侵权请及时联系删除,本站不承担任何法律责任!
2. 分享目的仅供大家学习和研究,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的教程、源码等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"www.94zyw.com",如遇到无法解压的请联系管理员!
94资源网 » Elasticsearch中的切词怎么实现的?