ES使用IK分词器

1. 去github下载esIk分词的源码  https://github.com/medcl/elasticsearch-analysis-ik
 
2.安装maven并编译,这里注意jdk的版本
编译好的lib在target下面,配置在config下面都能直接用
 
3.将编译好的jar包(elasticsearch-analysis-ik-1.2.9.jar)cp到$ES_HOME的lib下面,注意补全commons-logging、httpclient的两jar包
 
4.配置elasticsearch.yml,尾部加入index.analysis.analyzer.ik.type : "ik"
 
5.在$ES_HOME/config 新建ik目录,将词典的xml配置文件和基本词典cp进去
elasticsearch -d -Xms1024m -Xmx1024m 
 
6.启动es,创建testindex,
curl -XPUT ‘http://localhost:9200/testindex/'
 
7.测试
curl -XGET 'localhost:9200/_analyze?analyzer=ik' -d '我是中国人'
curl -XGET 'localhost:9200/testindex/_analyze?analyzer=ik' -d '百度的负面新闻
 
 
  index:
analysis:
analyzer:
ik:
alias: [ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider
ik_max_word:
type: ik
use_smart: false
ik_smart:
type: ik
use_smart: true
转载别人的问题

前提描述,关于如何在elasticsearch中使用IK分词器网上已经有很多资料了,这里不再叙述。下边主要说我遇到的问题和解决办法,以及将来大家可能也会遇到的问题。

        第一个问题:org.apache.http.client.ClientProtocolException类找不到异常,而且索引创建失败。

        开始我也很奇怪,一个分词器怎么会遇到httpclient的异常呢?在使用eclipse对elasticsearch-analysis-ik- 1.2.8进行maven打包时,我查看了源码,原则作者为了可以从远程库中动态加入新的分词,就使用了httpclient来加载。然后查看了源码的 pom.xml文件,发现这个分词器依赖:httpclient-4.3.5、httpcore-4.3.2、log4j-1.2.16、 commons-logging-1.1.3、commons-codec-1.6几个jar包。于是,就将这几个jar包放在ES_HOMT/lib 下,当前的问题解决了,而且可以用了。

        可是这个时候,系统服务端又报了一个错误:Caused by: org.apache.http.ProtocolException: Target host is not specified,于是查看了源码,原来IK分词器会从IKAnalyzer.cfg.xml配置文件的“remote_ext_dict”配置项来读 取用户自己扩展的分词。由于默认情况下这个没有设置,所以在org.wltea.analyzer.dic.Monitor类中报了这个错误,但是分析了 源码后赶紧这个的确不会影响到程序使用,可以不管。

        注意,我这里使用IK版本是1.2.8.

猜你喜欢

转载自tcxiang.iteye.com/blog/2188857
今日推荐