【发布时间】:2011-01-28 23:22:41
【问题描述】:
我正在将 Apache Lucene 支持添加到 Querydsl(它为 Java 提供类型安全的查询),但我无法理解 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 的查询评估?如有必要,我很乐意提供更多信息。
【问题讨论】:
标签: java lucene type-safety querydsl