Luceneのネストされたクエリの評価に関する否定
-
20-09-2019 - |
質問
私はにのApache Luceneののサポートを追加しています Querydslする(Java用のタイプセーフなクエリを提供している)とI Luceneのは、特にネストされたクエリで否定に関するクエリをどのように評価するかを理解する問題を抱えています。
たとえば、私の意見では次の2つのクエリは、意味的に同じですが、最初のものだけでは結果を返します。
+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のクエリ評価を誤解していますか?私は、必要に応じて、より多くの情報を与えるために満足しています。
解決
彼らは、意味的に同じではありません。
で
+year:1990 +(-title:"Jurassic Park")
あなただけではない句を持つサブクエリを持っています。何が起こっていることのLuceneを評価しているということです。
-title:"Jurassic Park"
句とそれが0の文書を返します。その後、サブクエリが発生しなければならないことを示していて、それがゼロの文書を返しますので、クエリの残りの部分を否定します。
所属していません StackOverflow