日本語検索のチューニング

 
 このドキュメントの目的は:
  1. Elasticsearchのチューニング方法
  2. Solrのチューニング方法
  3. 最適な検索結果を取得出来るElasticsearchの日本語チューニングの提案
  4. 最適な検索結果を取得出来るSolrの日本語チューニングの提案
  5. 上記チューニングについての詳細情報
  6. 専門用語用のチューニング

詳細

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

この記事は役に立ちましたか?
1人中0人がこの記事が役に立ったと言っています