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の同義語の設定1

「ソーラー」と検索しましたが「solr」にヒットはしませでした。

もしこの検索のヒットを逃したせいで売上が下がったら、非常に勿体無いですね。

ソーラーをsolrと書けない人、結構いそうです。

そういった表記ゆれを吸収する仕組みが、solrにはあるのです。それが同義語(Synonym)です。

では早速同義語を設定してみましょう。

初期設定のschema.xmlのtext_generalに同義語を設定してあるので、それをコピペします。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <-- ↓↓↓ これをコピー ↓↓↓ -->
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

以下の1行が同義語フィルタの設定なので、これをコピーします。

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>

これを以下のようにtext_jaに追加します。本当はコメントに色々説明が書いていますが、長すぎて邪魔なので削除しています。

<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
  <analyzer>
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
    <-- ↓↓↓ ここにペースト ↓↓↓ -->
    <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>

続いて、同義語の設定ファイル「synonyms.txt」を編集します。

solrの同義語の設定2

synonyms.txtに「ソーラー,solr」と追記し、tomcatを再起動し、再度「ソーラー」と検索してみましょう。

solrの同義語の設定3

今度はsolrにヒットしましたね。

◯ 広告