2010-09-15 18 views
25

query Lucene vs filtro?Lucene: Qual è la differenza tra query e filtro

Entrambi fanno cose simili come i filtri termquery per valore di termine, filtro credo sia lì per scopi simili.

Quando si utilizza il filtro e quando si esegue una query?

Proprio a partire dal Lucene oggi in modo da cercare di cancellare il concetto

risposta

8

Un Query può essere passato ad un Searcher per trovare i documenti. A Filter non può; può solo modificare i risultati prodotti da un Query.

Implementare un nuovo tipo Query è abbastanza complicata e richiede una comprensione del rapporto di interni Lucene come Weight, Scorer e Similarity. Un'implementazione Filter potrebbe essere abbastanza semplice e non interagire con lo IndexReader.

+0

Anche se quello che stai dicendo è corretto in linea di massima, i filtri possono essere passati anche agli utenti ma lavorano separatamente alle query – Khash

+0

@Khash Non sono sicuro di cosa intendi. Se stai dicendo che le istanze 'Filter' possono essere passate a un' Searcher' (o ora solo 'IndexSearcher'), questo è vero, ma solo insieme a una 'Query' o qualche altro criterio di ricerca. Non lavorano da soli. – erickson

17

Il filtro non influisce sul calcolo del punteggio dei documenti non filtrati.

Per esempio immaginare i seguenti documenti:

1. 
loc: "uk", "london" 
text: "i live in london, "london is the best" 

2. 
loc: "london avenue", "london street", "london" 
text: "I like the shop in london st." 

ora diciamo che si fa la seguente query:

q=+loc:"london" +text:"london" 

in questa query il punteggio di doc 2 è superiore a quella del doc 1 (perché loc è calcolato nel punteggio documento)

utilizzando un filtro:

q=+text:"london" f=+loc:"london" 

in questa query il punteggio di documento 1 è superiore a quello del documento 2.

Excuse la formattazione dello stile Solr ma l'idea generale è chiaro.

Altri motivi per l'utilizzo dei filtri sono a scopo di memorizzazione nella cache, i filtri vengono memorizzati nella cache separatamente dalle query, quindi se si dispone di una query dinamica con una parte statica, sarebbe opportuno filtrare in base alla parte statica. In questo modo l'attraversamento dell'indice è limitato al sottoinsieme di documenti filtrati.

0

Dopo aver chiuso un database, la selezione del filtro scompare. Ma quando chiudi una query e la riapri, sarà ancora lì.

È inoltre possibile creare una query utilizzando un modulo. Ma non puoi usare Filtro in un modulo.

+3

Di quale forma stai parlando? Perché un filtro non può essere utilizzato in tale forma? – Dennis

Problemi correlati