2011-01-19 9 views
2

私は映画のタイトルの索引付けをしています。現在私は2つのフィールドを持っています。Solr/Lucene:文字列をトークン化することは可能ですか?

1つはあらかじめ設定されたtextgenであり、1つは文字列です。大文字と小文字を区別しないように変更しました。

copyfieldディレクティブを使用して、両方のフィールドの同じデータにインデックスを付けます。

私はdismaxリクエストハンドラを使用しています。

「リングの君主」というタイトルで「ロードリング」を見つけることができるようにするためにこれを行いますが、正確なマッチを強調します。例えば、「主人公の指輪」は「主人公の指輪」よりも高いスコアですが、両方が見つかります。

私は正確に一致する必要があると思われる文字列フィールドで演奏しました。

しかし、私はどんな結果も得られません。私は正確な文字列を検索すると結果が得られます。さえないスペースが作業している...

  • はconfiguraition/analyzationは、あなたがこのユースケースのために推薦する何フィールド
  • カスタマイズされた文字列を持っている、それも可能ですか?

答えて

2

"文字列"フィールドはトークン化されていません(完全一致のみが有効です)。そのデータ型を「テキスト」に切り替えるか、チェーンにWhitespaceTokenizerを追加することができます。

また、正確な一致を手動で増やす必要はありません。スコアリングアルゴリズムがそれを行います。

2

solr/conf/schema.xmlの例を見てください。さまざまな種類のフィールドがあります。よく書かれています。検索のあなたのタイプのために

あなたはおそらくのようなポジションを持つ単純なトークン化小文字に変換フィールドが必要になります。ランキングはこれですでにかなり良いはず

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

。標準的なテキスト検索1については

は、ランキングを向上させるために、「ストップワード」と「ステミング」を使用して私はおそらくそれをしないだろうが、タイトルを検索する(下のフィールドのように):

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords_spanish.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.SnowballPorterFilterFactory" language="English"> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.SnowballPorterFilterFactory" language="English"/\ 
> 
     </analyzer> 
    </fieldType> 
関連する問題