2009-02-10 20 views
6

Sto cercando di incorporare Lucene.net nella mia ricerca sul web.Come ottenere il massimo da Lucene.net

Attualmente ho un indice lucene.net che contiene +1 milioni di documenti con 7 campi ciascuno. L'ultimo campo è il campo "tutti" che ha il contenuto dei precedenti campi concatenati. Cercare tutto il campo è ESTREMAMENTE veloce :)

Ma sento che c'è di più da trovare qui. Come posso effettuare una ricerca che ricerca una o più stringhe separate da spazi su tutti i campi senza utilizzare il campo "tutti"?
Desidero essere in grado di assegnare pesi a determinati campi. Inoltre sarebbe davvero bello se la ricerca contenesse informazioni su DOVE è avvenuto il colpo, quindi posso mostrarlo nel risultato.

Penso che sia tutto possibile, ma non vedo immideatelly come.
Qualsiasi aiuto?

risposta

3

Non penso che sia necessario mantenere un campo "tutto".

  1. Dai un'occhiata a "MultiFieldQueryParser". Anziché utilizzare un singolo campo predefinito da utilizzare dal parser di query, accetta un array di nomi di campi (oltre all'analizzatore di indici).
  2. L'aumento dei termini dovrebbe funzionare come in "QueryParser" (ovvero non è richiesta alcuna azione speciale). Devo aggiungere che ho trovato che il punteggio standard mi sembra soddisfacente (lunghezza del campo, numero di corrispondenze, ecc.) Senza utilizzare termini potenziati.
  3. Lucene.Net (beh, certamente le build SVN 2.3 al momento) include una porta del pacchetto Highlight dal sorgente Java. Ha un paio di stranezze (non ultima delle quali è che può essere complicato andare avanti in primo luogo), ma fondamentalmente funziona.

Buona fortuna

+0

Daremo un'occhiata a MultiFieldQueryParser. Grazie –

+0

Sembra che l'utilizzo di MultiFieldQueryParser crei una query in cui i miei termini devono esistere in TUTTI i campi interrogati. Posso cambiare questo in qualche modo? –

+0

Poiché non esiste alcuna funzione PM qui, avete qualche suggerimento per me riguardo il pacchetto highlight prima di iniziare a implementarlo? –

1

Devi ottenere Lucene in Action. Nonostante l'implementazione Lucene originale (ovvero Java), contiene tutte le informazioni necessarie: potenziamenti, evidenziatori, parser qwery, ecc.

+0

Se questa risulta essere la soluzione penso che sia, io dftly considerazione ottenere me stesso più risorse Lucene. Sembra che questo sostituirà il mio intero algoritmo di ricerca finora. E non mi importa :) –

4

Facciamo qualcosa di simile, il trucco è specificare i campi nella stringa di query:

(+Tier1:ribbon^1)^4 OR (+Tier2:ribbon^1)^4 OR (+Tier3:ribbon^1) OR (+Tier4:q*ribbon*^1)^12 

Nell'esempio precedente, l'utente ha cercato "ribbon" nella nostra applicazione. Abbiamo diversi segmenti di dati in campi diversi e il campo finale "Tier4" contiene tutti i termini precedenti concatenati insieme. Abbiamo anteporre il campo con una "q", in modo che possiamo fare che porta wild-card, anche:

(+Tier4:q*ribbon*^1)^12 

Infine, usiamo aumenta con l'accento circonflesso (^). Questo finisce per pesare le cose in modo diverso. Ci è voluto un po 'di tempo per migliorare, e non sono ancora felice al 100% con loro, ma hanno un grande impatto.

+0

quindi se dice (+ Tier1: ribbon^1)^4 significa, guarda nel campo Tier1 per la parola ribbon e dai il risultato di questo un peso di 4? Hai una facile risorsa su come creare stringhe di query? –

+0

È sciocco che le wild card in testa abbiano bisogno di un trucco come il personaggio anteposto. Qualche idea del perché? –

+0

Abbiamo dovuto andare alla documentazione Java per ottenere le informazioni sulla stringa di query. Inoltre, fai attenzione con molti termini.Potrebbe essere necessario chiamare .setMaxClauseCount() altrimenti si può generare un'eccezione. –

Problemi correlati