質問

私はにの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の文書を返します。その後、サブクエリが発生しなければならないことを示していて、それがゼロの文書を返しますので、クエリの残りの部分を否定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top