문제

나는 추가하고있다 아파치 루센 지원 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

루센 자신의 QueryParser 평가하는 것 같습니다 "AND (NOT" 같은 종류의 물체 나무로.

이것이 루센의 버그입니까, 아니면 루센의 쿼리 평가를 오해 했습니까? 필요한 경우 더 많은 정보를 제공하게되어 기쁩니다.

도움이 되었습니까?

해결책

그들은 의미 적으로 동일하지 않습니다.

~ 안에

+year:1990 +(-title:"Jurassic Park")

조항이 아닌 하위 쿼리가 있습니다. 일어나고있는 일은 루센이 평가하고 있다는 것입니다

-title:"Jurassic Park"

절과 0 문서를 반환하고 있습니다. 그런 다음 하위 쿼리가 발생해야한다는 것을 나타내며, 제로 문서를 반환하기 때문에 나머지 쿼리를 무효화합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top