分佈式搜索elasticsearch 中文分詞集成

對於索引可能最關係的就是分詞了 通常對於es 來講默認的smartcn  但效果不是很好 java

一個是ik的,一個是mmseg的,下面分別介紹下二者的用法,其實都差很少的,先安裝插件,命令行:git

安裝ik插件

plugin -install medcl/elasticsearch-analysis-ik/1.1.0github

下載ik相關配置詞典文件到config目錄json

cd configapi

wget http://github.com/downloads/medcl/elasticsearch-analysis-ik/ik.zip --no-check-certificateapp

unzip ik.zipelasticsearch

rm ik.zipide

分詞配置測試

ik分詞配置,在elasticsearch.yml文件中加上ui

index:
  analysis:                   
    analyzer:      
      ik:
          alias: [ik_analyzer]
          type: org.elasticsearch.index.analysis.IkAnalyzerProvider

index.analysis.analyzer.ik.type : 「ik」

安裝mmseg插件:

bin/plugin -install medcl/elasticsearch-analysis-mmseg/1.1.0

下載相關配置詞典文件到config目錄

cd config

wget http://github.com/downloads/medcl/elasticsearch-analysis-mmseg/mmseg.zip --no-check-certificate

unzip mmseg.zip

rm mmseg.zip

mmseg分詞配置,也是在在elasticsearch.yml文件中

index:
  analysis:
    analyzer:
      mmseg:
          alias: [news_analyzer, mmseg_analyzer]
          type: org.elasticsearch.index.analysis.MMsegAnalyzerProvider

index.analysis.analyzer.default.type : "mmseg"

mmseg分詞還有些更加個性化的參數設置以下

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"

這樣配置完後插件安裝完成,啓動es就會加載插件。

定義mapping

在添加索引的mapping時就能夠這樣定義分詞器

{
   "page":{
      "properties":{
         "title":{
            "type":"string",
            "indexAnalyzer":"ik",
            "searchAnalyzer":"ik"
         },
         "content":{
            "type":"string",
            "indexAnalyzer":"ik",
            "searchAnalyzer":"ik"
         }
      }
   }
}

indexAnalyzer爲索引時使用的分詞器,searchAnalyzer爲搜索時使用的分詞器。

java mapping代碼以下:

XContentBuilder content = XContentFactory.jsonBuilder().startObject()
        .startObject("page")
          .startObject("properties")       
            .startObject("title")
              .field("type", "string")           
              .field("indexAnalyzer", "ik")
              .field("searchAnalyzer", "ik")
            .endObject() 
            .startObject("code")
              .field("type", "string")         
              .field("indexAnalyzer", "ik")
              .field("searchAnalyzer", "ik")
            .endObject()     
          .endObject()
         .endObject()
       .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

相關文章
相關標籤/搜索