`
yucang52555
  • 浏览: 68176 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多
    要把分词器集成到elasticSearch里面,肯定先要弄到ik分词器的源码。链接如下:http://code.google.com/p/ik-analyzer/downloads/list,可以检查到项目源码结构如图刚好集成到elasticSearch中:

    集成进去之后,添加测试用例:
   
@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分词器很稳定,查阅文档,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(指尖天下),欢迎大伙加入交流学习。
  • 大小: 11 KB
  • 大小: 8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics