Querydsl (Java 용 형식 안전 쿼리를 제공함)에 Apache Lucene 지원을 추가하고 있으며 Lucene이 중첩 쿼리의 부정에 대해 쿼리를 평가하는 방법을 이해하는 데 문제가 있습니다.부정에 관한 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"
을 평가하는 것 같다.
Lucene의 버그입니까? 아니면 Lucene의 쿼리 평가를 오해 한 적이 있습니까? 필요한 경우 더 많은 정보를 제공해 드리겠습니다.
감사합니다. 지금은 완벽합니다. – ponzao
정말 단 한 번의 검색 만하면됩니다. –
좋아,이 말이 맞는 것 같습니다. 그러나 if (-title : "Jurassic Park")이 1 개 이상의 문서를 반환 한 경우 ... + 1 년 : 1990 년이 해당 문서에만 존재하면 해당 문서 만 히트로 제공됩니다. ?? .. 그 것처럼 보입니다. 조금 더 이해하고 싶다. – AngelsandDemons