2013-03-05 10 views
6

Sono nuovo di Lucene e sto cercando di analizzare una stringa non elaborata in uno Query utilizzando lo QueryParser.Perché Lucene QueryParser ha bisogno di un analizzatore

Mi chiedevo, perché il metodo QueryParser.Parse() ha bisogno di un parametro Analyzer?

Se l'analisi è qualcosa che ha a che fare con l'esecuzione di query, quindi un Analyzer deve essere specificato quando si tratta di normali Query oggetti così (TermQuery, BooleanQuery etc), e se no, perché è QueryParser lo richiede?

risposta

10

Durante l'indicizzazione, Lucene divide il testo in unità atomiche (token). Durante questa fase possono accadere molte cose (ad es. Minuscole, derivazioni, rimozione di stopword, ecc.). Il risultato finale è un termine.

Quindi, quando si esegue una query, Lucene applica esattamente lo stesso algoritmo alla query in modo che corrisponda al termine con un termine.

Q: Perché lo strumento TermQuery non richiede l'analizzatore?
A: QueryParser l'oggetto analizza la stringa di query e produce TermQuery (può anche generare altri tipi di query, ad esempio PhraseQuery). TermQuery contiene già termini nella stessa forma in cui si trovano nell'indice. Se tu (come programmatore) sei assolutamente sicuro di quello che stai facendo, puoi creare uno TermQuery da solo - ma questo presuppone che tu conosca la sequenza esatta di analisi delle query e che tu sappia come appaiono i termini nell'indice.

Q: Perché non richiede l'analizzatore BooleanQuery?
A: BooleanQuery unisce solo altre query utilizzando operatori (AND/OR/MUST/DOVREBBE, ecc.). Non è davvero utile senza altre domande.

Questa è una risposta semplificata molto. Consiglio vivamente di leggere il libro Introduction to Information Retrieval; contiene la teoria sulla base della quale è scritto Lucene (e altri quadri simili). Questo libro è disponibile online gratuitamente.

+0

Grazie, ma non spiega perché la specifica dell'analizzatore è richiesta solo durante l'analisi della stringa da interrogare e non sempre durante l'esecuzione di una query. – haim770

+0

Modificata la mia risposta, fammi sapere se non è abbastanza chiara o manca qualcosa. – mindas

Problemi correlati