我正在向Querydsl (它为 Java 提供类型安全的查询)添加Apache 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 的查询评估?如有必要,我很乐意提供更多信息。