如何开发自己的搜索帝国之安装ik分词器
Elasticsearch默认提供的分词器,会把每个汉字分开,而不是我们想要的根据关键词来分词,我是中国人 不能简单的分成一个个字,我们更希望 “中国人”,“中国”,“我”这样的分词,这样我们就需要安装中文分词插件,ik就是实现这个功能的。
elasticsearch-analysis-ik 是一款中文的分词插件,支持自定义词库。
现在开始安装ik分词器,安装之前,先说明一些变化:
- 之前可以在node节点上配置index默认的分词器,如果是多节点,那么在每个节点上都配置就行了。这个有点不灵活,所以。5.0之后,ES已经不再支持在elasticsearch.yml中配置分词器,改而在新建索引时,使用settings去配置,这个会在后面的编程中说到。
- 之前使用delete-by-query插件来实现type的整个删除。这个插件也是从5.0开始没有了,被整合到了ES的Core中
3.从5.0开始ik的tokenizer发生了变化,提供了两种,一种为ik_smart,一种为ik_max_word。直接一点,ik_max_word会尽量从输入中拆分出更多 token,而ik_smart则相反,个人感觉,ik_max_word就是原来的ik,ik_smart是新加的。
下载
有两种方式,一个是下载源码自己编译好后再上传到ES的插件库,第二种方法是直接下载编译好的上传。
1.源码安装
源码地址:
用kibana查看一下,后续会谈到如何这样做。
至此ES+Kibana+IK安装好了。从2.4.1到5.X版本号跨度很大,很多地方也发生了很多变化,总体来说,更简便了。
配置IKAnalyzer.cfg.xml
IKAnalyzer.cfg.xml
在{conf}/analysis-ik/config/IKAnalyzer.cfg.xml
或 {plugins}/elasticsearch-analysis-ik-*/config/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">custom/mydict.dic;custom/single_word_low_freq.dic</entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords">custom/ext_stopword.dic</entry> <!--用户可以在这里配置远程扩展字典 --> <entry key="remote_ext_dict">location</entry> <!--用户可以在这里配置远程扩展停止词字典--> <entry key="remote_ext_stopwords">http://xxx.com/xxx.dic</entry></properties>
热更新 IK 分词使用方法
目前该插件支持热更新 IK 分词,通过上文在 IK 配置文件中提到的如下配置
<!--用户可以在这里配置远程扩展字典 --> <entry key="remote_ext_dict">location</entry> <!--用户可以在这里配置远程扩展停止词字典