分布式検索elasticsearch中国語分詞集積.


Elasticsearch公式はsmartcnという中国語の分詞プラグインしか提供していないが、効果はあまりよくない.幸い、国内にmedcl大神(国内で最も早くesを研究した人の一人)が書いた2つの中国語の分詞プラグインがある.1つはikで、1つはmmsegで、以下はそれぞれ両者の使い方を紹介する.
[plain]
plugin -install medcl/elasticsearch-analysis-ik/1.1.0  

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

ik関連コンフィギュレーション辞書ファイルをconfigディレクトリにダウンロード
[plain]
cd config  
  • wget http://github.com/downloads/medcl/elasticsearch-analysis-ik/ik.zip --no-check-certificate  

  • unzip ik.zip  
  • rm ik.zip  
  • 
    cd config
    wget http://github.com/downloads/medcl/elasticsearch-analysis-ik/ik.zip --no-check-certificate
    unzip ik.zip
    rm ik.zip

    mmsegプラグインのインストール:
    [plain]
    bin/plugin -install medcl/elasticsearch-analysis-mmseg/1.1.0  
    
    bin/plugin -install medcl/elasticsearch-analysis-mmseg/1.1.0
    

    関連するコンフィギュレーション辞書ファイルをconfigディレクトリにダウンロード
    [plain]
    cd config  
  • wget http://github.com/downloads/medcl/elasticsearch-analysis-mmseg/mmseg.zip --no-check-certificate  

  • unzip mmseg.zip  
  • rm mmseg.zip  
  • 
    cd config
    wget http://github.com/downloads/medcl/elasticsearch-analysis-mmseg/mmseg.zip --no-check-certificate
    unzip mmseg.zip
    rm mmseg.zip
    

    分詞の構成
    ik分詞構成、elasticsearch.ymlファイルに追加
    [html]
    index:  
  •   analysis:                     

  •     analyzer:        
  •       ik:  

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

    または
    [html]
    index.analysis.analyzer.ik.type : “ik”  
    
    index.analysis.analyzer.ik.type : “ik”

    この2つの意味は同じmmseg分詞構成であり、elasticsearch.ymlファイルにもあります.
    [html]
    index:  
  •   analysis:  

  •     analyzer:  
  •       mmseg:  

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

    または
    [html]
    index.analysis.analyzer.default.type : "mmseg"  
    
    index.analysis.analyzer.default.type : "mmseg"
    

    mmseg分詞には、より個性的なパラメータが以下のように設定されています.
    [html]
    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"  
  • 
    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を追加すると、分詞器をこのように定義できます.
    [plain]
    {  
  •    "page":{  

  •       "properties":{  
  •          "title":{  

  •             "type":"string",  
  •             "indexAnalyzer":"ik",  

  •             "searchAnalyzer":"ik"  
  •          },  

  •          "content":{  
  •             "type":"string",  

  •             "indexAnalyzer":"ik",  
  •             "searchAnalyzer":"ik"  

  •          }  
  •       }  

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

    indexAnalyzerはインデックス時に使用する分詞器、searchAnalyzerは検索時に使用する分詞器です.
    JAva mappingコードは以下の通りです.
    [java]
    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()  
  • 
    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()

    定義が完了すると、操作インデックスは指定した分詞器で分詞されます.
     
    添付:
    ik分詞プラグインプロジェクトアドレス:https://github.com/medcl/elasticsearch-analysis-ik
    mmseg分詞プラグイン項目アドレス:https://github.com/medcl/elasticsearch-analysis-mmseg
    構成が面倒であれば、構成されたesバージョンをダウンロードすることもできます.アドレスは以下の通りです.https://github.com/medcl/elasticsearch-rtf