Elasticsearch实践(四):IK分词

环境:Elasticsearch 6.2.4 + Kibana 6.2.4 + ik 6.2.4

Elasticsearch默认也能对中文进行分词。

我们先来看看自带的中文分词效果:

结果:

我们发现,是按照每个字进行分词的。这种在实际应用里肯定达不到想要的效果。当然,如果是日志搜索,使用自带的就足够了。

其实调用的是 分词器。

接下来,我们安装IK分词插件进行分词。

安装IK

IK项目地址:https://github.com/medcl/elasticsearch-analysis-ik

首先需要说明的是,IK插件必须和 ElasticSearch 的版本一致,否则不兼容。

安装方法1:从 https://github.com/medcl/elasticsearch-analysis-ik/releases 下载压缩包,然后在ES的 目录创建 子目录,把压缩包的内容复制到这个目录里面即可。最终 目录里面的内容:

然后重启 ElasticSearch。

安装方法2:

如果已下载压缩包,直接使用:

然后重启 ElasticSearch。

IK分词

IK支持两种分词模式:

ikmaxword: 会将文本做最细粒度的拆分,会穷尽各种可能的组合

ik_smart: 会做最粗粒度的拆分

接下来,我们测算IK分词效果和自带的有什么不同:

结果:

再试一下 的效果:

设置mapping默认分词器

示例:

注:这里设置 与 相同是为了确保搜索时和索引时使用相同的分词器,以确保查询中的术语与反向索引中的术语具有相同的格式。如果不设置 ,则 与 相同。详细请查阅:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-analyzer.html

防盗版声明:本文系原创文章,发布于公众号 (fhyblog)及博客园,转载需作者同意。

自定义分词词典

我们也可以定义自己的词典供IK使用。比如:

结果:

我们希望 作为一个整体,这时候可以把该词加入到自己的词典里。

新建自己的词典只需要简单几步就可以完成:1、在 目录增加一个 :

为词典文件,其实就是简单的文本文件,词语与词语直接需要换行。注意是UTF8编码。我们看一下自带的分词文件:

2、然后修改 文件:

增加了 ,然后重启ES。我们再看一下效果:

结果:

说明自定义词典生效了。如果有多个词典,使用英文分号隔开:

另外,我们看到配置里还有个 ,这个是用来辅助断句的。我们可以看一下自带的一个 :

也就是IK分词器遇到这些词就认为前面的词语不会与这些词构成词语。

IK分词也支持远程词典,远程词典的好处是支持热更新。词典格式和本地的一致,都是一行一个分词(换行符用 ),还要求填写的URL满足:

详见:https://github.com/medcl/elasticsearch-analysis-ik 热更新 IK 分词使用方法 部分。

注意:上面的示例里我们改的是 目录下内容,是因为IK是通过方法2里 安装的。如果你是通过解压方式安装的,那么IK配置会在plugins目录,即: 。也就是说插件的配置既可以放在插件所在目录,也可以放在Elasticsearch的config目录里面。

ES内置的Analyzer分析器

es自带了许多内置的Analyzer分析器,无需配置就可以直接在index中使用:

标准分词器(standard):以单词边界切分字符串为terms,根据Unicode文本分割算法。它会移除大部分的标点符号,小写分词后的term,支持停用词。

简单分词器(simple):该分词器会在遇到非字母时切分字符串,小写所有的term。

空格分词器(whitespace):遇到空格字符时切分字符串,

停用词分词器(stop):类似简单分词器,同时支持移除停用词。

关键词分词器(keyword):无操作分词器,会输出与输入相同的内容作为一个single term。

模式分词器(pattern):使用正则表达式讲字符串且分为terms。支持小写字母和停用词。

语言分词器(language):支持许多基于特定语言的分词器,比如english或french。

签名分词器(fingerprint):是一个专家分词器,会产生一个签名,可以用于去重检测。

自定义分词器:如果内置分词器无法满足你的需求,可以自定义custom分词器,根据不同的character filters,tokenizer,token filters的组合 。例如IK就是自定义分词器。

详见文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html

参考

1、medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.https://github.com/medcl/elasticsearch-analysis-ik

2、ElesticSearch IK中文分词使用详解 - xsdxs的博客 - CSDN博客

https://blog.csdn.net/xsdxs/article/details/72853288

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181201G0E25E00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券