Java Lucene';s关于否定的嵌套查询求值

Java Lucene';s关于否定的嵌套查询求值,java,lucene,type-safety,querydsl,Java,Lucene,Type Safety,Querydsl,我正在添加对(它为Java提供类型安全查询)的支持,我在理解Lucene如何评估查询时遇到了问题,特别是关于嵌套查询中的否定 例如,我认为以下两个查询在语义上是相同的,但只有第一个查询返回结果 +year:1990 -title:"Jurassic Park" +year:1990 +(-title:"Jurassic Park") 第二个示例中的简化对象树如下所示 query : Query clauses : ArrayList [0] : BooleanClause

我正在添加对(它为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
似乎将
和(而不是“
计算到同一种对象树中


这是Lucene中的错误还是我误解了Lucene的查询计算?如果需要,我很乐意提供更多信息。

它们在语义上不一样

您有一个子查询,它只有一个NOT子句

-title:"Jurassic Park"

子句返回0个文档。然后您指示子查询必须发生,因为它返回零个文档,所以它会否定查询的其余部分。

非常感谢,现在它非常有意义。好吧,…这似乎有意义。但是如果(-title:“Jurassic Park”)呢返回了1个以上的文档..这是否意味着,如果该文档中存在+年份:1990,则该文档将作为hit提供..似乎是这样..只是想了解更多。
-title:"Jurassic Park"