elasticsearch中文分词集成

elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介绍下两者的用法,其实都差不多的,先安装插件,命令行:
安装ik插件:

[plain]  view plain copy
  1. 在https://github.com/medcl/elasticsearch-analysis-ik下载ik plugin 解压 编译生成elasticsearch-analysis-ik-1.2.6.jar 在elasticsearch-1.0.0\plugins目录下建立analysis-ik 将elasticsearch-analysis-ik-1.2.6.jar放到analysis-ik下

下载ik相关配置词典文件到config目录

[plain]  view plain co
将解压config\ik目录 拷贝到elasticsearch-1.0.0\config目录下 

安装mmseg插件:

[plain]  view plain copy
    1. 在https://github.com/medcl/elasticsearch-analysis-mmseg下载ik plugin 解压 编译生成elasticsearch-analysis-mmseg-1.2.6.jar 在elasticsearch-1.0.0\plugins目录下建立analysis-mmseg 将elasticsearch-analysis-mmseg-1.2.6.jar放到analysis-mmseg下

下载相关配置词典文件到config目录

[plain]  view plain copy
  1. 将解压config\mmseg目录 拷贝到elasticsearch-1.0.0\config目录下 

分词配置

在elasticsearch.yml文件中加上

[html]  view plain copy
  1. index:
      analysis:
        tokenizer:
          mmseg_maxword:
            type: mmseg
            seg_type: max_word
          mmseg_complex:
            type: mmseg
            seg_type: complex
          mmseg_simple:
            type: mmseg
            seg_type: simple
        analyzer:
          ik:
            alias:
            - ik_analyzer
            type: org.elasticsearch.index.analysis.IkAnalyzerProvider
          ik_max_word:
            type: ik
            use_smart: false
          ik_smart:
            type: ik
            use_smart: true
          mmseg:
            alias:
            - mmseg_analyzer
            type: org.elasticsearch.index.analysis.MMsegAnalyzerProvider
          mmseg_maxword:
            type: custom
            filter:
            - lowercase
            tokenizer: mmseg_maxword
          mmseg_complex:
            type: custom
            filter:
            - lowercase
            tokenizer: mmseg_complex
          mmseg_simple:
            type: custom
            filter:
            - lowercase
            tokenizer: mmseg_simple
  2. index.analysis.analyzer.default.type: mmseg

index.analysis.analyzer.default.type: mmseg这样配置完后插件安装完成,启动es就会加载插件。

定义mapping

在添加索引的mapping时就可以这样定义分词器

[plain]  view plain copy
  1. {  
  2.    "page":{  
  3.       "properties":{  
  4.          "title":{  
  5.             "type":"string",  
  6.             "indexAnalyzer":"ik",  
  7.             "searchAnalyzer":"ik"  
  8.          },  
  9.          "content":{  
  10.             "type":"string",  
  11.             "indexAnalyzer":"ik",  
  12.             "searchAnalyzer":"ik"  
  13.          }  
  14.       }  
  15.    }  
  16. }  

indexAnalyzer为索引时使用的分词器,searchAnalyzer为搜索时使用的分词器。

java mapping代码如下:

[java]  view plain copy
  1. XContentBuilder content = XContentFactory.jsonBuilder().startObject()  
  2.         .startObject("page")  
  3.           .startObject("properties")         
  4.             .startObject("title")  
  5.               .field("type""string")             
  6.               .field("indexAnalyzer""ik")  
  7.               .field("searchAnalyzer""ik")  
  8.             .endObject()   
  9.             .startObject("code")  
  10.               .field("type""string")           
  11.               .field("indexAnalyzer""ik")  
  12.               .field("searchAnalyzer""ik")  
  13.             .endObject()       
  14.           .endObject()  
  15.          .endObject()  
  16.        .endObject()  

定义完后操作索引就会以指定的分词器来进行分词。

测试分词可用调用下面api,注意indexname为索引名,随便指定一个索引就行了
http://localhost:9200/indexname/_analyze?analyzer=ik&text=测试elasticsearch分词器

附:

ik分词插件项目地址:https://github.com/medcl/elasticsearch-analysis-ik

mmseg分词插件项目地址:https://github.com/medcl/elasticsearch-analysis-mmseg

如果觉得配置麻烦,也可以下载个配置好的es版本,地址如下:https://github.com/medcl/elasticsearch-rtf


参考文献:http://blog.csdn.net/laigood12345/article/details/8193758

你可能感兴趣的:(elasticsearch中文分词集成)