DBA Elasticsearch 分词器

分词器

​ 分词的意思就是将一段文字拆分成一个一个的关键字,在搜索时通过关键字搜索出相关数据。

​ 举例:

美国队长
- 美国
- 美国队
- 国队
- 队长
- 美国队长

​ 当然,这里的分词规则只是较常用的一种,除此之外还有非常多的分词规则。

​ 下面我们将使用kibana对其进行详细的测试。

内置分词器

standard

​ 内置的分词器,区分中文、英文。

​ 中文为最小单元分词:

GET _analyze
{
  "analyzer": "standard",
  "text": "美国队长的传奇一生"
}

image-20210404235920787

​ 该分词器对英文支持较好:

GET _analyze
{
  "analyzer": "standard",
  "text": "my name is Elasticsearch"
}

image-20210405000023786

simple

​ 较为轻量级的分词器,先按照空格分,同时它会将大写英文转换为小写,之后只要不是普通字符的就进行一次分词:

GET _analyze
{
  "analyzer": "simple",
  "text": "CAPTAIN America 的传奇 一生"
}

image-20210405000723970

whitespace

​ 较为轻量级的分词器,先按照空格分,它并不会将大写英文转换为小写,

​ 此外、只要不是普通字符的就进行一次分词:

GET _analyze
{
  "analyzer": "whitespace",
  "text": "CAPTAIN America 的传奇 一生"
}

image-20210405000904520

IK分词器

安装部署

​ IK分词器是一个非常火的中文分词器,它能够提供多种分词规则。

​ 如果不使用IK分词器,则中文默认按照最小单元进行划分,即每个汉字都拆分开,是十分不方便的,而IK分词器却恰好可以解决这个问题。

​ 除此之外,它还能提供自定义词库等相关操作,从而让开发人员能够随意定制检索关键词。

​ 在下载安装时要注意与Elasticsearch版本对应。

​ 不同于之前介绍到Elasticsearch-head和kibana工具,IK分词器需要安装在Elasticsearch服务终端上以插件的形式进行载入。

Github地址

image-20210404233412428

​ 1)进入Elasticsearch的pubgins目录中:

$ cd /usr/share/elasticsearch/plugins

​ 2)下载并解压zip包:

$ mkdir ik
$ cd ik
$ wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch-analysis-ik-7.6.1.zip
$ unzip elasticsearch-analysis-ik-7.6.1.zip

​ 3)重启Elasticsearch服务:

$ systemctl restart elasticsearch

4)重启成功后查看是否加载了该插件:

$ cd /usr/share/elasticsearch/bin/
$ /bin/bash elasticsearch-plugin list
ik

分词规则

​ ik分词器提供2种分词功能。

  • ik_smart:相对于智能的拆分,拆分次数较少
  • ik_max_word:最细粒度拆分,拆分次数较多

ik_smart

​ 功能测试,ik_smart拆分规则为次数较少的拆分:

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "美国队长的传奇一生"
}

image-20210404235714649

ik_max_word

​ 功能测试,ik_max_word拆分规则为最细粒度拆分:

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "美国队长的传奇一生"
}

image-20210405001547205

词库配置

​ 自定义词库,如著名的旅游胜地德玛西亚这个词汇并没有被IK分词器字典所收录:

image-20210405001824269

​ 在Elasticsearch的ik插件目录中新增字典文件:

$ cd /usr/share/elasticsearch/plugins/ik/config/
$ vim ./addr.dic

# 输入
德玛西亚

​ 然后需要加载该配置:

$ vim IKAnalyzer.cfg.xml

# 修改
<entry key="ext_dict">./addr.dic</entry>

​ 最后重启Elasticsearch服务:

$ systemctl restart elasticsearch

​ 再次进行测试:

image-20210405003723781

posted @ 2021-04-05 00:39  云崖君  阅读(87)  评论(0编辑  收藏  举报