elasticsearch participle - yaokun123/php-wiki GitHub Wiki

es分词

一、es官方默认的分词插件

当安装完Elasticsearch之后,默认已经含有一个分词法,就是standard,这个分词法对英文的支持还可以,但是对中文的支持非常差劲

这是因为standard标准分词器,在处理中文的时候会把中文单词切分成一个一个的汉字,因此引入es之中文的分词器插件es-ik就能解决这个问题。

测试默认分词

测试默认分词

二、如何集成IK分词工具

由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsearch上使用。

这个IK分词插件挺好用的,支持自定义分词,更重要的是支持热更新。

添加了IK插件意味着你可以使用ik_smart(最粗粒度的拆分)和ik_max_word(最细粒度的拆分)两种analyzer。

在安装ik分词器之前,先测试一下看看你有没有安装过,避免重复安装

如果出现"failed to find global analyzer [ik_max_word]这样的错误说明ik还没有安装,可以进行下面步骤安装ik分词

或者直接进入es目录的plugins目录查看有没有ik相关的插件

1、进入github的网站搜索elasticsearch-analysis-ik或直接进入:https://github.com/medcl/elasticsearch-analysis-ik

2、查看README.md即可安装使用

我采用的是第二种安装方法:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.2/elasticsearch-analysis-ik-6.3.2.zip

要注意安装ik的版本一定要和es的版本对应起来,不然会报版本不一致的错误

比如我的es版本是6.3.2,就采用上面的安装即可,如果是其他版本,修改版本号即可

注意:修改版本号的时候有两个地方。一个是v6.3.2一个是elasticsearch-analysis-ik-6.3.2.zip

三、测试一下分词效果

测试一下ik_max_word(最细粒度的拆分)

测试一下ik_smart(最粗粒度的拆分)

ik_smart效果不是怎么好吧,推荐使用ik_max_word,不过也是根据自己的业务选择

到此ik分词器的安装已经告一段落,需要注意的是:

若你是单节点的es集群的话,则只需在一台部署es-ik。若比如像我这里的话,是3台,则需在三台都部署es-ik。

四、IK分词的配置

IK分词器作为一个开源软件,分词功能非常强大,一般场合的分词需求,他都可以完胜。但是对于专业术语和行业用词,ik有点不太智能,不过IK已经很棒了!下面我就介绍下如何手动添加热词文件的形式来拓展ik认知能力(分词索引)。

IKAnalyzer.cfg.xml可以位于
{conf}/analysis-ik/config/IKAnalyzer.cfg.xml(我的就在这里) 或
{plugins}/elasticsearch-analysis-ik-*/config/IKAnalyzer.cfg.xml\

配置自己的词库

我们可以先去ik插件的config文件下,已经有很多的dic文件。这就是ik自己的热词。

  • 1.我们需要搜集我们需要的行业术语,dic文件。
  • 2.我自己加了一个叫my.dic文件
  • 3.我加了两个词,注意每个热词是需要换行的。
  • 4.我现在把my.dic配置到内部。
vim IKAnalyzer.cfg.xml

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">my.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

也可以配置为一个目录(该目录下的所有文件都有效),如果使用相对路径的话该目录就要与IKAnalyzer.cfg.xml同级

配置项:

<entry key="ext_dict">my_dic/</entry>#这个斜线可写可不写

目录所在位置:/yaokun/elasticsearch-6.3.1/config/analysis-ik/my_dic

  • 5.然后重启es。

下面就去测一下分词吧

⚠️ **GitHub.com Fallback** ⚠️