首页 > NoSQL > elasticsearch自定义ik词库

elasticsearch自定义ik词库

2018年8月7日 发表评论 阅读评论

最近一直在研究使用elasticsearch,es默认的分析器对中文只能提供一个一个汉字的分词,这对搜索有些要求的应用或项目来说有些差强人意的。所以很多人选择国人开发的分词插件ik来选择中文默认的分词器,插件在github上面的地址是medcl/elasticsearch-analysis-ik

安装ik

官方提供了2中方式来安装ik,下载稳定的发布包,或者通过”elasticsearch-plugin”来安装。elasticsearch-plugin安装是很方便,不过可能会有一些问题要解决“java.security.AccessControlException: access denied”问题,在最新版的6.3版本中,加入了”plugin-security.policy”来解决这个文。如果有AccessControlException问题的,查看《elasticsearch ik socket access denied》来解决你的问题。

plugin安装命令

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

 发布包方式

cd {your-es-root}/plugins/ && mkdir ik
cp -r elasticsearch-analysis-ik-* {your-es-root}/plugins/ik

这里的”{your-es-root}”是你es的根目录,”elasticsearch-analysis-ik-*”表示你解压以后的ik插件目录。

可以通过访问”http://localhost:9200/_cat/plugins?pretty”来查看你的ik是否安装成功。

自定义分词

ik的配置文件IKAnalyzer.cfg.xml可以在 ” {conf}/analysis-ik/config/IKAnalyzer.cfg.xml" 或者 “{plugins}/elasticsearch-analysis-ik-*/config/IKAnalyzer.cfg.xml"。如果你没有找到试试用find命令来查找。

<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<!-- <entry key="ext_dict">custom/custom.dic</entry> -->
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<entry key="remote_ext_dict">http://xxxxx/ik/custom.dic</entry>
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">http://xxxxxx/ik/stopwords.dic</entry> -->
</properties>

这是IKAnalyzer.cfg.xml的文件格式,我们要自定义分词,把”ext_dict”设置成我们分词文件所在的目录就可以。分词文件的格式是一行一个分词,也就是用”\n”分隔,和下面要介绍的热加载分词格式一样。然后重启es,如果没有错误发生,那么自定义分词就生效了。但是这种方式如果我们想要修改添加分词每次必须要重启es。

热加载自定义分词

通过”remote_ext_dict”我们可以配置热加载的分词词库,这是一个url地址,它大概会每隔60秒来检查一下地址,如果有变化就加载新的词库。

1、该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。

2、该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。

把词库生成到nginx服务器指定路径下面即可。注意修改完配置文件以后要生效也需要重启。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
您必须在 登录 后才能发布评论.