3

ストップワードを無視してフィールドでSolrクエリを並べ替えようとしていますが、その方法が見つからないようです。たとえば、結果を次のように並べ替えたいとします。

  • チャーリー
  • キツネ
  • ヘリコプター

これは可能ですか?現在、フィールドタイプは次のように定義されています。

    <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" />
      </analyzer>
    </fieldType>

そして、フィールドは次のように追加されます。

    <field name="title" type="alphaOnlySort" indexed="true" stored="false"/>

他の誰かもこれをしなければならなかったようですか?それとも、ストップワードなしでソートするのはノーノーですか?

4

3 に答える 3

2

KeywordTokenizerFactory はコンテンツを個々の断片に分割しないため、StopFilterFactory はトークン (コンテンツ全体) をストップ ワード リストと照合しようとしますが、一致するものは見つかりません。インデックスからストップワードを取得するには、WhitespaceTokenizerFactory のようなトークナイザーを使用する必要がありますが、トークン化されたフィールドでソートすることはできません。したがって、これを行うために私が考えることができる唯一の方法は次のとおりです。

  1. KeywordTokenizerFactory を引き続き使用し、
  2. StopFilterFactory を取り除く
  3. また、PatternReplaceFilterFactory を使用した正規表現を使用して、コンテンツからストップ ワードを削除します (これは現在、数字を削除するために使用されています)。

通常、(検索ではなく) 並べ替えに必要なストップ ワードは、"A"、"AN"、"THE" だけです。私は reg 式があまり得意ではありませんが、これは多くの人にとって些細なことだと確信しています。

于 2011-03-03T11:49:58.187 に答える
1

パーサーのチェーンにストップワードフィルターを実際に追加する必要があります。インデックスを作成するテキストをSolrAdminのフィールドアナライザーに貼り付けると、AFoxのAがドロップされていないことがわかります。

于 2010-08-03T14:50:56.707 に答える
1

Eric が言及したアナライザーを使用して、ストップ ワード フィルターは文の断片ではなく、一致した正確な単語のみを取得することがわかりました。したがって、「THE」のトークンがあれば、それを削除します。ただし、「THE FISH」のトークンがあれば触れません。

それで、これを機能させる方法はありますか?ストップワードを無視して、フィールドでソートしたいだけです。しかし、結果は文章 (または本の名前) の集まりです。

于 2010-08-03T15:57:33.337 に答える