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 个字段中搜索一个词,所以这个选项不太受欢迎。

谢谢。

4

1 回答 1

1

我猜您的“怪异”更多地与您的 solrconfig 规则有关,而不是与您的停用词查询有关。我在子查询中遇到了类似的停用词查询问题,它最终成为我的 Dismax 搜索处理程序中的最小匹配规则。

查看您的内部solrconfig.xml并查找requestHandler您的搜索正在使用的内容。您应该"mm"声明一个(最小匹配)字符串。无论您的目标是什么,请尝试调整您的规则,使其限制更少或更多。

祝你好运!

于 2012-12-14T03:49:44.560 回答