
集成进去之后,添加测试用例:
@Test public void testIKAnalyzer(){ Listtext = new ArrayList (); text.add("冷眼向洋看世界"); text.add("现有的中文分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法"); for (String currentStr : text) { try { StringReader myreader = new StringReader(currentStr); IKSegmenter segmenter = new IKSegmenter(myreader, true); Lexeme mylexeme = segmenter.next(); while (mylexeme != null) { System.out.print(mylexeme.getLexemeText()); System.out.print("---"); mylexeme = segmenter.next(); } System.out.println(); } catch (Exception e) { e.printStackTrace(); } } }
可以得到结果:
加载扩展词典:ext.dic 加载扩展停止词典:stopword.dic 冷眼---向---洋---看---世界--- 现有---中文---分词---算法---可分为---三---大类---基于---字符串---匹配---分词---方法---基于---理解---分词---方法---和---基于---统计---分词---方法---
分词效果虽然还不是那么好,只是代码在里面跑起来了。接下来就需要我们通过elasticSeratch调用分词器,对内容进行分词了。
=============================================================================================================================================================================================================================================
开发中途了解到,ik不支持词性标注。于是起了换一个分词器的想法,在聊天群里面询问之后,了解到ansj分词器很稳定,查阅文档, http://hi.baidu.com/erliang20088/item/2c5d12198afdf9c6bf904259,主要借鉴这篇文档分词器集成成功。以下简述步骤:
1:从[url]http://maven.ansj.org/org/ansj/elasticsearch-analysis-ansj/ [/url]直接下载zip包解压到plugin目录下(我用的版本号是:elasticsearch-analysis-ansj-1.x.1),我用的源码没有plugins,直接创建一个,zip包挤压之后,把jar放进去,然后把词库放到同目录下。

2:在es下config/elasticsearch.yml 文件末尾加上以下(1)或者(2)的配置。
(1)为简洁配置,一些高级属性均采用默认,要求不高的话可采用下边配置,该处配置与参考博文是一致的。
################################## ANSJ PLUG CONFIG ################################ index: analysis: analyzer: index_ansj: type: ansj_index query_ansj: type: ansj_query index.analysis.analyzer.default.type: ansj_index
(2)为高级配置,加入一些高级属性,该处配置与博文不一致,去掉了一些容易引起异常的配置。
################################## ANSJ PLUG CONFIG ################################ index: analysis: analyzer: index_ansj: alias: [ansj_index_analyzer] type: ansj_index is_name: false redis: pool: maxactive: 20 maxidle: 10 maxwait: 100 testonborrow: true ip: master.redis.yao.com:6379 channel: ansj_term query_ansj: alias: [ansj_query_analyzer] type: ansj_query is_name: false redis: pool: maxactive: 20 maxidle: 10 maxwait: 100 testonborrow: true ip: master.redis.yao.com:6379 channel: ansj_term
3:重启集群后,查看log输出。如果出现类似于“ansj分词器预热完毕,可以使用!”等等的字样说明加载成功,可以使用了。
4:结果检测:
(1)linux下,人们喜欢用“curl -XGET http://host:9200/[index]/_analyze?analyzer=ansj_index&text=测试用例”来测试。正常的话,会返回相应的json结果。注意其中的参数要正确,包括host、indexName、analyzer等。此处有一个es的不合理之处,要求至少要有一个indexName才可以进行这样的分词测试,这显然是不合理的。但只能如此接受了。
(2)window下,直接用浏览器中输入“http://host_ip:9200/[index_name]/_analyze?analyzer=ansj_index&text=测试用例”即可,亦会返回相应的分词结果的json格式串。
程序猿行业技术生活交流群:181287753(指尖天下),欢迎大伙加入交流学习。