- Elasticsearchのチューニング方法
- Solrのチューニング方法
- 最適な検索結果を取得出来るElasticsearchの日本語チューニングの提案
- 最適な検索結果を取得出来るSolrの日本語チューニングの提案
- 上記チューニングについての詳細情報
- 専門用語用のチューニング
詳細
1. Elasticsearchのチューニング方法
Elasticsearchのアナライザーとマッピングは「システム設定>Elasticsearch」画面から調整出来ます。
Additional Index Configurations: この項目では、利用出来るアナライザー、Tokenizerと各フィルターを設定する
Additional Type Mappings: この項目では、それぞれのフィールドはどのアナライザーを利用するかを指定する
2. Solrのチューニング方法
Solrサーバーにある「schema.xml
」にてアナライザーとマッピングを調整・オーバーライド出来ます。
analyzer: このタグでは、それぞれのフィールドタイプに関してアナライザー、Tokenizerと利用するフィルターを指定する
3. Elasticsearchの日本語チューニングの提案
最適な検索結果を取得出来るように、Kuromojiアナライザーを調整します。
Index Configuration:
{ "analysis": { "filter": { "readingform": { "type": "kuromoji_readingform", "use_romaji": "false" } }, "tokenizer": { "liferay_kuromoji_tokenizer": { "type": "kuromoji_tokenizer", "mode": "search" } }, "analyzer": { "liferay_kuromoji": { "type": "custom", "tokenizer": "liferay_kuromoji_tokenizer", "char_filter": [ "html_strip", "kuromoji_iteration_mark" ], "filter": [ "lowercase", "cjk_width", "kuromoji_baseform", "kuromoji_part_of_speech", "readingform", "kuromoji_stemmer" ] } } } }
Type Mappings:
{ "dynamic_templates": [ { "template_ja": { "mapping": { "index": "analyzed", "store": "true", "analyzer": "liferay_kuromoji", "type": "string", "term_vector": "with_positions_offsets" }, "match": "\\w+_ja\\b|\\w+_ja_[A-Z]{2}\\b", "match_mapping_type": "string", "match_pattern": "regex" } }] }
4. Solrの日本語チューニングの提案
最適な検索結果を取得出来るように、Kuromojiアナライザーを調整します。
schema.xml:
<fieldType autoGeneratePhraseQueries="false" class="solr.TextField" name="text_ja" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" /> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.CJKWidthFilterFactory" /> <filter class="solr.JapaneseBaseFormFilterFactory" /> <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" /> <filter class="solr.JapaneseReadingFormFilterFactory" useRomaji="false" /> <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4" /> </analyzer> </fieldType>
5. 上記チューニングについての詳細情報
デフォルトの日本語検索では、日本語形態素解析のできるKuromojiのアナライザーが利用されます。
提案したチューニングもKuromojiを利用して、日本のユーザエクスペリエンスを向上するように、さらに最適化されました。
以下は、そのチューニングの設定を説明します。
Tokenizer モード → 形態素解析に加え、複合語をさらに分割
Lowercase フィルター → 大文字・小文字の区別なし
CKJWidth フィルター → 全角・半角文字の区別なし
BaseForm フィルター → 辞書の見出し系に変換
PartOfSpeech フィルター → 品詞分解
ReadingForm フィルター → 読み方分解(仮名)
KatakanaStem フィルター → カタカナ長音記号の削除
上記Elasticsearchの設定とSolrの設定はKuromojiの設定が一致しているため、検索結果が統一となります。
6. 専門用語用のチューニング
デフォルトでは、MeCab-IPADIC辞書がKuromojiに挿入されています。しかし、企業の専門用語を対応するには追加チューニングが必要となります。
Elasticsearch>Additional Index Configurations: user_dictionary
"tokenizer": { "liferay_kuromoji_tokenizer": { "type": "kuromoji_tokenizer", "mode": "search", "user_dictionary": "/path/to/specific/dictionary.txt" } }
Solr>schema.xml
: user-dictionary
<tokenizer class="solr.JapaneseTokenizerFactory" mode="search" user-dictionary="/path/to/specific/dictionary.txt" />
辞書のフォーマットについては、次の資料をご参照ください:
https://github.com/atilika/kuromoji/blob/master/kuromoji-core/src/test/resources/userdict.txt