0

私のsolrフィールドの1つは、次の有人で構成されています。

<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
 <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" types="wdfftypes.txt"/>
    <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
 <analyzer type="query">
   <tokenizer class="solr.WhitespaceTokenizerFactory"/>
   <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
   <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" types="wdfftypes.txt"/>
   <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

これは、ステミングが不要な場合に機能しますが、問題を引き起こしている別のユース ケースがあり、人々は次の組み合わせを探し始めています。

  • The Ivy : この場合、予想される結果が The である場合に、単に ivy が返されます。これはストップワードが原因であることは理解していますが、これを達成する方法です。たとえば、引用符内で「ツタ」を検索する場合、これは機能するはずです。

  • (Mom & Me) OR ("mom and me"): この場合も & が削除されるか、ステートメントの一部に mom と me の両方を含む結果が返されます。

新しいデータのみが正しい方法で動作し、インデックスを再作成できない場合は問題ありません。また、schema.xml ファイルを変更すると、完全なレプリケーションがトリガーされますか?

よろしく、
アユシュ

4

1 に答える 1

0

空白のトークナイザーを使用しています。つまり、「The Ivy」は 2 つの単語に分割されます。

WordDelimiterFilterFactoryオプションをアクティブにするために、あまり攻撃的でないトークン化 an に続いて the を使用できprotected="protwords.txt"ます。この場合、solr がそれをトークン化しないように、保護された単語として「the ivy」を設定できます。

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory

于 2013-01-06T09:13:28.223 に答える