2

いくつかのドキュメント(ニュース)のインデックスを作成するために、solrでluceneを使用しています。これらのドキュメントにも見出しがあります。次に、HEADLINEフィールドをファセット検索して、カウントが最も高い用語を見つけようとします。これはすべて、ストップワードリストを含めて問題なく機能します。HEADLINEフィールドは複数の値のフィールドです。私はsolr.StandardTokenizerFactoryこれらのフィールドを単一の用語に分割するためにを使用します(これはベストプラクティスではありませんが、それが唯一の方法であり、機能します)。

9/11時々、トークナイザーは、 (9と11に分割される)のように分割されるべきではない用語を分割します。そこで、「protword」リストを使用することにしました。「9/11」はこのプロトワードリストの一部です。しかし、変化はありません。

これが私のschema.xmlの一部です

  <fieldType name="facet_headline" class="solr.TextField" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory" protected="protwords.txt"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.TrimFilterFactory" />
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true"
                    words="stopwords.txt"
                    enablePositionIncrements="true"
                protected="protwords.txt"
                />
        </analyzer>
   </fieldType>

ファセットの結果を見ると、「9/11」を「9」または「11」にグループ化(ファセット)したものの、「9/11」を扱っていないドキュメントがたくさんあります。

なぜこれが機能しないのですか?

ありがとうございました。

4

2 に答える 2

1

問題は、好きなフィルター/トークン化機能に保護された単語を設定できないことです。特定のフィルターのみがその機能をサポートします。したがって、StandardTokenizerは保護された単語を無視し、とにかく9/11を「9」「11」に分割します。を使用するWhitespaceTokenizerと、9.11が分割されないことが保証されます。

さらに、StopFilterFactoryが保護された単語を認識しているようには見えません(「to」や「and」などのストップワードを除外するだけです。WordDelimiterFilterFactoryは保護された単語を使用します。したがって、それを試してみて、役立つかどうかを確認してください。 。

ドキュメントがどのように分析されるかを確認する最良の方法は、組み込みのSolr管理ユーティリティを使用して、フィールドが索引付けまたは照会されたときにフィールドがどのように分類されるかを確認することです。

于 2011-09-09T15:50:10.783 に答える
0

その問題の最終的な解決策は、solr.PatternTokenizerFactory

于 2011-09-15T15:27:00.960 に答える