solr3.6、ついにリリースされましたね。
solr3.6になって、atilikaが作っている、
日本語形態素解析機である「kuromoji」が標準搭載される事になりました。
比較的新しく、pure javaなので、senやgosenではなくkuromojiを使っていくといいかと思います。
(lucene-gosenもいいですが、やはり標準搭載を使って行きたい)
早速synonym(同義語)の設定をしてみます。
field_typeがtext_jaのものが、kuromojiによる形態素の設定のようです。
まずはanalyzerの設定を、queryとindexに分けます。
<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false"> <analyzer type="index"> <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/> <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> <analyzer type="query"> <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/> <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>
次に、「solr.SynonymFilterFactory」をindexとqueryの両方に追加します。
<tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.JapaneseBaseFormFilterFactory"/>
そして、synonyms.txtに適当に「kuromoji,形態素解析」等と書いて、tomcatを起動します。
analysisのページで同義語を試してみましょう。
あれ?検索にヒットしない。SynonymFilterFactoryが効いてないのか???
まさかとは思うが、SynonymFilterFactoryって、デフォルトのトークナイザが「solr.StandardTokenizerFactory」なのか?
試しにトークナイザを指定してみる。
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> ↓こう編集 <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.JapaneseTokenizerFactory"/>
キターーー!
どうやらtokenizerFactoryでsolr.JapaneseTokenizerFactoryを指定してやると動くようです。
本当にこれで正しいのだろうか。solr wikiにも書いてないし、合ってる自信無いですが、
動いたので良しとします・・
Apache Solr入門 ―オープンソース全文検索エンジン
- 作者: 関口宏司,三部靖夫,武田光平,中野猛,大谷純
- 出版社/メーカー: 技術評論社
- 発売日: 2010/02/20
- メディア: 大型本
- 購入: 14人 クリック: 452回
- この商品を含むブログ (19件) を見る