Запрос Solr: стоп-слова, OR и AND странность

Мы используем 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 полях, этот вариант менее предпочтителен.

Спасибо.

6
задан Noam 4 April 2012 в 18:24
поделиться