Apache Solr

 

solrで全角数値を検索可能にする

solrで全角数値を検索できるよう設定しましょう。初期状態では検索できないので、是非solr導入時点で設定しておいて下さい!

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

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

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

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

◯ 広告

solrで形態素解析器にkuromojiを使っている場合、初期設定では全角数値を検索できません。

どうなるか、analysis画面で試してみましょう。

text_jaは以下のような状態です。

<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
    <analyzer>
        <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"/>
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
</fieldType>

この状態で検索してみます。

solrで全角数値検索

このように、1文字づつ単語に分割されてしまい、検索に全くヒットしません。

では早速対応してみます。

schema.xmlのtext_jaを以下のように変更します。

<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
    <analyzer>
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-char.txt"/>
        <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"/>
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
</fieldType>

追加したのは <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-char.txt"/> の部分です。

続いて、$SOLR_HOME/conf/mapping-char.txt を作成し、以下の内容で保存します。

"0" => "0"
"1" => "1"
"2" => "2"
"3" => "3"
"4" => "4"
"5" => "5"
"6" => "6"
"7" => "7"
"8" => "8"
"9" => "9"

tomcatを再起動し、再度試してみます。

solrで全角数値検索

全角数値で検索して全角数値と半角数値にヒットしました!

このMappingCharFilterFactoryですが、全角文字列だけでなく、半角カタカナ等もマッピングすると便利です。

例えば「ア」を「ア」にマッピングしたりして、2ch用語っぽい言葉もヒットさせる事ができるようになります。

◯ 広告