elasticsearch1.2.1集成ansj中文分词

近日,由于工作需要,要在es集群中添加分词模块,辅助搜索的多重需求。下述之。

  主要参考的这篇博文https://github.com/4onni/elasticsearch-analysis-ansj,和与ansj分词作者孙建,以及“群名称是elasticsearch交流2,群号为211682609”,特示谢意。

 一、搭建

  在该篇基础之上,略做精简如下文 步做法:

  1、进入http://maven.ansj.org/org/ansj/elasticsearch-analysis-ansj/ 直接下 载zip包解压到plugin目录下。

    2、将解压后的analysis-ansj拷贝到$ES_HOME/plugins目录下

    3、 将解压后的dic文件夹拷贝到$ES_HOME/config目录下 

    4、 配置分词插件,将下面配置(1)或(2)粘贴到,es下config/elasticsearch.yml 文件末尾。

    5、重启集群后,查看log输出。如果出现类似于“ansj分词器预热完毕,可以使用!”等等的字样说明加载成功,可以使用了。


配置(1)为简洁配置,一些高级属性均采用默认,要求不高的话可采用下边配置,该处配置与参考博文是一致的。

   

1
2
3
4
5
6
7
8
9
10
################################## ANSJ PLUG CONFIG ################################
index:
    analysis:
      analyzer:
         index_ansj:
             type: ansj_index
         query_ansj:
             type: ansj_query
 
index.analysis.analyzer. default .type: ansj_index

配置(2)为高级配置,加入一些高级属性,该处配置与博文不一致,去掉了一些容易引起异常的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
################################## 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

二、测试

   首先开始es集群,并将分词插件至少装在了要测试的集群节点中。如果集群中的每个节点均要分词,则要把分词插件分别复制相应文件到各节点中,重启节点即可。

   测试可以用两种方式,

   (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格式串。

    PS : 注意其中的analyzer=ansj_index部分,ansj分词作者在此处分为ansj_index和ansj_analyzer两种分词器,后者是前者的一个子集。前者分出来的term会包含后者,主要是为了提高召回率而做,后者会是一个用户输入的query的ansj分词的结果串。

    可以通过分别使用不同的analyzer来查看不同的分词结果集合,能明显看出两者的区别,也能清楚的看到对召回率提升的原因。因此在mapping中的json配置文件中,如果有分词的字段,名为analyzer_field,应如下:

   

1
2
3
4
5
6
"analyzer_field" : {
   "type" :  "string" ,
   "store" : "yes" ,
   "index_analyzer" :  "index_ansj" ,
   "search_analyzer" :  "query_ansj"
}

在这样配置完成,并加入相关数据后,可以通过es的head插件方便进行测试。可以进行各种搜索件的搜索测试,如

elasticsearch1.2.1集成ansj中文分词_第1张图片


下一篇,将专门针对这些不同的搜索匹配关键词,进行逐一介绍。


由于时间关系,暂写于此,如有问题欢迎加入网络爬虫、nlp群320349384进行交流指正。

你可能感兴趣的:(elasticsearch,互联网,大数据,云计算)