Я добавляю Apache Lucene поддержку Querydsl (который предлагает запросы типа безопасного доступа для Java), и у меня возникают проблемы с пониманием того, как Lucene оценивает запросы, особенно в отношении отрицания в вложенных запросах.Оценка вложенных запросов Lucene в отношении отрицания
Например, следующие два запроса, на мой взгляд, семантически одинаковы, но только первый возвращает результаты.
+year:1990 -title:"Jurassic Park"
+year:1990 +(-title:"Jurassic Park")
Дерево упрощенных объектов во втором примере показано ниже.
query : Query
clauses : ArrayList
[0] : BooleanClause
"MUST" occur : BooleanClause.Occur
"year:1990" query : TermQuery
[1] : BooleanClause
"MUST" occur : BooleanClause.Occur
query : BooleanQuery
clauses : ArrayList
[0] : BooleanClause
"MUST_NOT" occur : BooleanClause.Occur
"title:"Jurassic Park"" query : TermQuery
Lucene собственного QueryParser
, кажется, оценить "AND (NOT"
в такой же объект деревьев.
Это ошибка в Lucene или я неправильно понял оценку Lucene? Я рад предоставить дополнительную информацию, если это необходимо.
Спасибо за кучу, теперь это имеет смысл. – ponzao
Как делать НЕ ТОЛЬКО поиск, если вам действительно нужно ... –
Хорошо, это кажется разумным. Но что, если (-title: «Jurassic Park») вернул более 1 документа. Это означает, что если в этом документе присутствует только год: 1990, только этот документ будет предоставлен как попадание? .. Похоже на это .. Просто хочу понять немного больше. – AngelsandDemons