分布式検索elasticsearch中国語分詞集積.
Elasticsearch公式はsmartcnという中国語の分詞プラグインしか提供していないが、効果はあまりよくない.幸い、国内にmedcl大神(国内で最も早くesを研究した人の一人)が書いた2つの中国語の分詞プラグインがある.1つはikで、1つはmmsegで、以下はそれぞれ両者の使い方を紹介する.
[plain]
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
mmsegプラグインのインストール:
[plain]
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
分詞の構成
ik分詞構成、elasticsearch.ymlファイルに追加
[html]
index: analysis:
analyzer: ik:
alias: [ik_analyzer] type: org.elasticsearch.index.analysis.IkAnalyzerProvider
または
[html]
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
または
[html]
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"
これにより、構成が完了するとプラグインのインストールが完了し、esを起動するとプラグインがロードされます.
mappingの定義
インデックスのmappingを追加すると、分詞器をこのように定義できます.
[plain]
{ "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()
定義が完了すると、操作インデックスは指定した分詞器で分詞されます.
添付:
ik分詞プラグインプロジェクトアドレス:https://github.com/medcl/elasticsearch-analysis-ik
mmseg分詞プラグイン項目アドレス:https://github.com/medcl/elasticsearch-analysis-mmseg
構成が面倒であれば、構成されたesバージョンをダウンロードすることもできます.アドレスは以下の通りです.https://github.com/medcl/elasticsearch-rtf
[plain]
plugin -install medcl/elasticsearch-analysis-ik/1.1.0
plugin -install medcl/elasticsearch-analysis-ik/1.1.0
ik関連コンフィギュレーション辞書ファイルをconfigディレクトリにダウンロード
[plain]
cd config
unzip 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
unzip 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:
analyzer:
alias: [ik_analyzer]
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:
analyzer:
alias: [news_analyzer, mmseg_analyzer]
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:
tokenizer:
type: mmseg
mmseg_complex:
seg_type: "complex"
type: 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を追加すると、分詞器をこのように定義できます.
[plain]
{
"properties":{
"type":"string",
"searchAnalyzer":"ik"
"content":{
"indexAnalyzer":"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("properties")
.field("type", "string")
.field("searchAnalyzer", "ik")
.startObject("code")
.field("indexAnalyzer", "ik")
.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