SolrでStopFilter、JapaneseBasicFormFilter、SynonymFilterを使ってみる

こないだTomcat7にSolr3.5をインストールしてみましたが、
今回は検索の精度を高めると言いますか、
– 要らんのが検索で引っかからないように取り除いて、
– 意図が同じなのは検索で引っかかるようにする。
なんていう事をしてみようと思います。
 
■ StopFilter
 
stopwords_ja.txtでは以下のようにいれてみました。

# Standard english stop words taken from Lucene's StopAnalyzer
する
ます
た
だ
です
ある
いる
は
を
。
、

 
schema.xmlは、、

    <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
        <analyzer>
            <tokenizer class="solr.JapaneseTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" words="stopwords_ja.txt"/>
        </analyzer>
    </fieldType>

 
“私は眠いです。”とかってのを食わせてやると、

 
“私” “眠い” ってなってくれたりしてイイ感じです。

 
他に要らないのを食わないようにするために、POSFilterFactoryっていうフィルタを使って
pos-deny.txtに定義した特定の品詞を食わないように出来たりします。
 
 
■ JapaneseBasicFormFilter
 
曲名が”会いたかった” なのか “会いたい” なのか、、みたいな歌を検索したいとします。
んま、どっち入れても引っかかって欲しいですよね、と。
 
schema.xmlは、さっきのstopとあわせて↓以下のように設定します。

    <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
        <analyzer>
            <tokenizer class="solr.JapaneseTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" words="stopwords_ja.txt"/>
            <filter class="solr.JapaneseBasicFormFilterFactory"/>
        </analyzer>
    </fieldType>

 
以下のように”会いたかった”でインデクシングして、”会いたい”で検索したとします。

 
結果は”会う”と”たい”でマッチしました。

 
“たい”の助動詞はPOSFilterで落としちゃってもイイかなぁというような気がしますが、
とりあえずやりたかった事は出来ました。
 
 
■ SynonymFilter
 
“マクドナルド”の事を、関西の人は”マクド”って言ったり、関東の人は”マック”って言ったりしますが、
どれでも、引っかかって欲しいところだと思います。
あとは、”Google”と”グーグル”って同じ事指してるよね、と。
 
synonyms-ja.txtに以下のように書きこんで、
(マクドナルドは展開。Googleは寄せる。)

マクドナルド, マック, マクド
Google => グーグル

 
schema.xmlは更に追記する感じで、synonyms-ja.txtを指定してやります。

        <analyzer>
            <tokenizer class="solr.JapaneseTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" words="stopwords_ja.txt"/>
            <filter class="solr.JapaneseBasicFormFilterFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms-ja.txt"/>
        </analyzer>

 
あんまり良い例か分かりませんが、”Google”と”マクドナルド”という単語が入った文字列をインデクシングして、
“グーグル マック”というキーワードで検索してみます。

 
結果は狙ったように↓検索出来ました。

 
 
他にも、カタカナの最後の”ー”を取るとか、ケースインセンティブにするとか、
追加すべきフィルタはチョコチョコありますが、基本的には上記のような感じで試しながらやってみる、と。
ただ、一回インデクシングしちゃった後に、ファイルに何か足すとかなると、もう一回インデックス作りなおしかよ的な
感じになってしまうところもあったりして、運用も想定した上で構築していかなきゃならんなぁと。
 
 
にしても、ほんとSolr使いには↓バイブルだな…。

Apache Solr入門 ―オープンソース全文検索エンジン
関口 宏司 三部 靖夫 武田 光平 中野 猛 大谷 純
技術評論社
売り上げランキング: 19771

コメント

タイトルとURLをコピーしました