6

次のフィールド宣言を持つスキーマで Solr 3.5 を使用しています。

<fieldType name="fieldN" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory"
            generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" 
            catenateAll="0" splitOnCaseChange="1" splitOnNumerics="0" preserveOriginal="1"/>
    <filter class="solr.LengthFilterFactory" min="2" max="256"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"
            />
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LengthFilterFactory" min="2" max="256"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"
            />
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

次のようなクエリを送信すると:

field1:"term1"

Solr は結果を返します。

このクエリを実行すると、まだ結果が得られます。

field1:"term1" AND (field2:term2 OR field3:term2)

term2はストップ ワードであり、term1通常の単語です。

しかし、次のようなクエリを送信すると:

field1:"term1" AND (field2:term2 OR field3:term2 OR field4:term2)

何も返されません。

また、次のようなことを行うと、次のことに気付きました。

(field1:"term1" AND (field2:term2 OR field3:term2)) OR (field1:"term1" AND field4:term2)

も機能しますが、実際のクエリでは約 200 のフィールドで 1 つの用語を検索する必要があるため、このオプションはあまり優先されません。

ありがとう。

4

1 に答える 1

1

あなたの「奇妙さ」は、ストップワードを使用したクエリではなく、solrconfig ルールに関係していると思います。サブクエリ内のストップワード クエリで同様の問題が発生し、Dismax 検索ハンドラの最小一致ルールになってしまいました。

あなたの中solrconfig.xmlを見て、requestHandlerあなたの検索が使用しているものを探してください。"mm"(Minimum Match) 文字列を宣言する必要があります。目標が何であれ、制限を緩和または緩和するようにルールを調整してみてください。

頑張ってください!

于 2012-12-14T03:49:44.560 に答える