Apache Solr

 

solrの日本語形態素解析の設定

solr3.6から内蔵されたkuromojiを使っった日本語形態素解析の設定をします。lucene gosenとは形態素解析辞書の使い方が違うので注意しましょう。

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

まずはanalysis画面で、形態素解析のユーザ定義辞書未設定の状態で検索してましょう。

初期設定のschema.xmlに日本語形態素解析を設定した「text_ja」があるので、typeに「text_ja」を指定します。

solrの日本語形態素解析のユーザ定義辞書

宇治抹茶ケーキ」で検索したのですが、この文章にヒットしました。この結果、どう思いますか?

ユーザ視点では「宇治抹茶ケーキ」を探しているのであって、分割された単語を含むページが見たい訳ではないのです。

この状態は検索の精度が低いと言えると思います。

よほど困っているユーザでない限り、必要な情報を頑張って探してくれないので、コンバージョンも下がり、売上も比例して下がるでしょう。

kuromojiの形態素解析辞書は、jarファイルに内包しているので、別ファイルに辞書を作成し、それを読み込むようにします。

solrのインストールで作成したsolr-testにすでに空の辞書ファイルが存在するので、それを使います。

まず、/solr-test/solr/core1/conf/lang/userdict_ja.txt を開きます。

solrの日本語形態素解析のユーザ定義辞書

userdict_ja.txtを編集します。(サンプルに朝青龍とか書いてますが、気にしないで下さい。。。atilika何考えてるんだ)

# Custom reading for former sumo wrestler
朝青龍,朝青龍,アサショウリュウ,カスタム人名
# 以下を追加
宇治抹茶ケーキ,宇治抹茶ケーキ,ウジマッチャケーキ,カスタム名詞

次に、schema.xmlを修正します。トークナイザに辞書のパスを設定すると、kuromojiがそれを認識してくれます。

<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
  <analyzer>
    <!--
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
    ↓↓↓ こう修正します ↓↓↓
    -->
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.JapaneseBaseFormFilterFactory"/>
    <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" enablePositionIncrements="true"/>
    <filter class="solr.CJKWidthFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" enablePositionIncrements="true" />
    <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

ではtomcatを再起動し、再度検索してみます。

solrの日本語形態素解析のユーザ定義辞書

宇治抹茶ケーキがヒットしなくなりました。

Query Analyzer部分も「宇治」「抹茶」「ケーキ」から「宇治抹茶ケーキ」になりましたね。

続いて、本来ヒットして欲しい文章に変えて、本当に目的の検索になっているか確認します。

solrの日本語形態素解析のユーザ定義辞書

ヒットしました。

これが、本来検索でヒットさせたい文章なのです。

◯ 広告