`
yucang52555
  • 浏览: 70216 次
  • 性别: 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
分享到:
评论

相关推荐

    ik分词器elastcisearch6.4.2插件源码

    ik分词器,支持elastcisearch6.4.2的源码,如果要使用其他6.X版本的,可以在源码内修改pom.xml中的es版本号。 该源码格式也可为想自己写一个analyzer插件的朋友也可当demo参考

    elastcisearch-6.3.0

    Elasticsearch 6.3.0 是一个高度可扩展、实时的搜索和分析引擎,它在IT领域,尤其是大数据分析和日志管理方面扮演着重要角色。作为Apache Lucene的衍生项目,Elasticsearch以其分布式、全文检索、实时性、高可用性...

    shawncai#learnDoc#基础24 ElastciSearch search结果解析1

    24 ElastciSearch search结果解析概述1、我们如果发出一个搜索请求的话,会拿到一堆搜索结果,本节课,我们来讲解一下,这个搜索结果里的各种数据

    shawncai#learnDoc#基础20 ElastciSearch 小结1

    什么类型的应用程序1)数据量较大,es的分布式本质,可以帮助你快速进行扩容,承载大量数据2)数据结构灵活多变,随时可能会变化,而且数据结构之间的关系,非常复杂,

    elasticsearch集群监控插件

    在大数据时代,高效、可靠的监控对于任何分布式系统,特别是搜索引擎和分析平台如Elasticsearch来说至关重要。Elasticsearch作为一个强大的开源搜索和分析引擎,需要实时监控其性能和健康状况以确保稳定运行。...

    Elasticsearch之倒排索引

    默认的分析器是标准分析器,它遵循Unicode的单词边界规则,去除标点符号,并将词转化为小写。用户也可以自定义分析器,例如使用IKAnalyzer,以适应不同的分词需求。 倒排索引一旦被构建,就不再发生变化,这种不变...

    ElasticSearch 安装

    ElasticSearch 是一个流行的开源搜索引擎和分析引擎,常用于大数据分析、日志聚合以及实时搜索。本教程将详细介绍在 CentOS 7.7 64位系统上安装ElasticSearch 6.8.6、Kibana 6.8.6 和 JDK 1.8.0_162 的步骤。 首先...

    elastiknn:Elasticsearch插件,用于最近的邻居搜索。 存储向量并使用精确算法和近似算法运行相似性搜索

    弹性蛋白 Elasticsearch插件,用于在密集的浮点和稀疏布尔向量上进行相似性搜索。 文献资料 如果您想为Elastiknn做出贡献,请参阅developer-... Elastiknn JSON API的Scala案例类和圆形编解码器 基于elastic4s的Elast

    ASSESS:适用于标准的自动语义搜索引擎

    具有3个数据索引(主索引,系统日志和用户统计信息)的Elastcisearch服务器 Kibana用于查看数据 docker-compose.yml显示软件堆栈。 您可以使用docker-compose up -d运行堆栈。 请注意,您需要Elasticsearch索引数据...

Global site tag (gtag.js) - Google Analytics