elastciSearch源码分析——集成分词器

要把分词器集成到elasticSearch里面,肯定先要弄到ik分词器的源码。链接如下:[url]http://code.google.com/p/ik-analyzer/downloads/list[/url],可以检查到项目源码结构如图刚好集成到elasticSearch中:
[img]http://dl2.iteye.com/upload/attachment/0103/3199/caeb730e-300a-3a97-89be-3a66c70cb6d2.png[/img]
集成进去之后,添加测试用例:
@Test
public void testIKAnalyzer(){
List<String> text = new ArrayList<String>();
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分词器很稳定,查阅文档,[url]http://hi.baidu.com/erliang20088/item/2c5d12198afdf9c6bf904259[/url],主要借鉴这篇文档分词器集成成功。以下简述步骤:
1:从[url]http://maven.ansj.org/org/ansj/elasticsearch-analysis-ansj/ [/url]直接下载zip包解压到plugin目录下(我用的版本号是:elasticsearch-analysis-ansj-1.x.1),我用的源码没有plugins,直接创建一个,zip包挤压之后,把jar放进去,然后把词库放到同目录下。
[img]http://dl2.iteye.com/upload/attachment/0103/5761/305502e1-5e33-3190-b0d8-1d62a0eed694.png[/img]
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(指尖天下),欢迎大伙加入交流学习。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值