Допустим, у нас есть индекс Lucene с несколькими документами, индексированными с использованием StopAnalyzer.ENGLISH_STOP_WORDS_SET
.Пользователь выдает два запроса:
Предположим, что первый запрос дает некоторые результаты, поскольку есть документысоответствующий этому запросу.
Второй запрос дает 0 результатов.Причина этого заключается в том, что когда baz:"there is"
анализируется, он заканчивается как пустой запрос, поскольку оба там и равны являются стоп-словами (технически говоря, это преобразуется в пустой *)1019 * без оговорок).Пока все хорошо.
Однако любой из следующих комбинированных запросов
+foo:bar +baz:"there is"
foo:bar AND baz:"there is"
ведет себяточно так же, как запрос +foo:bar
, то есть возвращает некоторые результаты - все, несмотря на вторую AND
часть, которая не дает результатов.
Можно утверждать, что при ANDing должны выполняться оба условия, но это не так.
Это кажется противоречивым, поскольку элементарный элемент запроса по-разному влияет на общий запрос в зависимости от контекста.Есть ли логическое объяснение этому?Можно ли это как-то решить, желательно без написания собственного QueryAnalyzer
?Может ли это быть классифицировано как ошибка Lucene?
Если это что-то меняет, наблюдаемое поведение происходит в Lucene v3.0.2.
Этот вопрос был также размещен в Списке рассылки пользователей Lucene Java, пока ответов не было.