Solr查询:停止单词,OR和AND古怪

时间:2012-04-04 14:56:38

标签: solr lucene

我们正在使用具有以下字段声明的模式的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 个答案:

答案 0 :(得分:1)

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

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

祝你好运!