Apache LuceneサポートをQuerydsl (Java のタイプ セーフ クエリを提供)に追加していますが、特にネストされたクエリの否定に関して、Lucene がクエリを評価する方法を理解するのに問題があります。
たとえば、私の意見では、次の 2 つのクエリは意味的に同じですが、最初のクエリだけが結果を返します。
+year:1990 -title:"Jurassic Park"
+year:1990 +(-title:"Jurassic Park")
2 番目の例の簡略化されたオブジェクト ツリーを以下に示します。
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 のクエリ評価を誤解していますか? 必要に応じて、さらに情報を提供していただければ幸いです。