nidificato valutazione domanda per quanto riguarda la negazione di Lucene
-
20-09-2019 - |
Domanda
Io sono l'aggiunta di supporto Apache Lucene per Querydsl (che offre query type-safe per Java) ed io sto avendo difficoltà a capire come Lucene valuta query soprattutto per quanto riguarda negazione nelle query nidificate.
Per esempio i seguenti due query a mio parere sono semanticamente lo stesso, ma solo il primo restituisce risultati.
+year:1990 -title:"Jurassic Park"
+year:1990 +(-title:"Jurassic Park")
L'albero oggetto semplificata nel secondo esempio è mostrato sotto.
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
proprio QueryParser
di Lucene sembra di valutare "AND (NOT"
nello stesso tipo di alberi di oggetti.
Si tratta di un bug in Lucene o ho frainteso la valutazione di query di Lucene? Sono felice di dare più informazioni, se necessario.
Soluzione
Non sono semanticamente lo stesso.
+year:1990 +(-title:"Jurassic Park")
Si dispone di un subquery che ha un solo NON clausola. Quello che sta succedendo è che Lucene sta valutando l'
-title:"Jurassic Park"
clausola ed è il ritorno 0 documenti. Poi si sta ad indicare che deve avvenire la subquery, e dal momento che è tornare a zero i documenti, si nega il resto della query.