QA@IT

Solrで日本語の自動補完機能を実装しているが、文の途中の単語で補完が動かない

3085 PV

Solrで日本語の自動補完機能を実装していますが、文の途中の単語で補完が動きません。

例えば、「サンプル用の文書です」という文章に対して、
「サンプル」や「さん」と入力すると、正しく文章を表示するのですが、
「文章」や「ぶん」と入力をしても文章が補完されません。

おそらく、fieldType等のフィルターの設定等が原因と思われますが、
どなたか詳しい方、ご教授頂ければ幸いです。

作業環境は
OS X 10.10.1
solr-4.10.3

以下、autocomplete関連の設定を示します。

-- solrconfig.xml --

  <!-- Auto Complete component -->
  <searchComponent class="solr.SpellCheckComponent" name="autocomplete_ja">
    <lst name="spellchecker">
      <str name="name">autocomplete_ja</str>
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
      <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.AnalyzingLookupFactory</str>
      <!-- str name="storeDir">autocomplete_ja</str-->
      <str name="sourceLocation">source.txt</str>
      <str name="buildOnCommit">true</str>
      <str name="comparatorClass">freq</str>
      <str name="field">name</str>
      <!-- Suggester properties -->
      <str name="suggestAnalyzerFieldType">text_ja_romaji</str>
      <bool name="exactMatchFirst">true</bool>
    </lst>
    <!-- specify a fieldtype using keywordtokenizer + lowercase + cleanup -->
    <str name="queryAnalyzerFieldType">text_ja_romaji</str>
  </searchComponent>

  <!-- Auto Complete handler -->
  <requestHandler name="/autocomplete_ja" class="org.apache.solr.handler.component.SearchHandler">
    <lst name="defaults">
      <str name="spellcheck">true</str>
      <str name="spellcheck.dictionary">autocomplete_ja</str>
      <str name="spellcheck.collate">true</str>
      <str name="spellcheck.count">10</str>
      <str name="spellcheck.onlyMorePopular">true</str>
    </lst>
    <arr name="components">
      <str>autocomplete_ja</str>
    </arr>
  </requestHandler>

-- scheme.xml --

    <fieldType name="text_ja_romaji" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
      <analyzer>
        <tokenizer class="solr.JapaneseTokenizerFactory" mode="normal"/>
        <filter class="solr.CJKWidthFilterFactory"/>
        <filter class="solr.JapaneseReadingFormFilterFactory" useRomaji="true"/>
        <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="99" outputUnigrams="false" outputUnigramsIfNoShingles="true" tokenSeparator=""/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

-- source.txt --
サンプル用の文書です

ウォッチ

この質問への回答やコメントをメールでお知らせします。