2012-01-16 16 views
6

È possibile determinare che i termini specifici siano più importanti di altri quando si crea l'indice (non quando si esegue una query)?Ottimizzazione dei termini di Lucene durante la creazione dell'indice

Si consideri ad esempio un filtro sinonimo:
doc 1: "questa è una bella macchina"
doc 2: "questo è un bel veicolo"

voglio aggiungere il veicolo termine per la prima doc e il termine auto per il secondo documento, ma voglio che se più tardi l'indice viene interrogato con la parola auto, allora il primo documento sarà segnato più alto del secondo e se interrogato per il veicolo sarà il contrario.

Chiamare setBoost sui campi prima di aggiungerli ai rispettivi documenti fa il trucco?

O forse dovrei aggiungere i sinonimi a un nome di campo diverso?

O sto guardando questo da un punto di vista sbagliato?

Grazie

risposta

4

impostazione enfasi su un depositata colpisce tutti i termini in quel campo quindi questo non avrebbe funzionato nel tuo caso.

Ma dovrebbe essere possibile utilizzando i payload Lucene (una matrice di byte che può essere impostata per ogni termine). Li useresti per impostare aumenti specifici del termine (veicolo a 0.5 per il documento 1, ad esempio). Quindi implementerai il tuo metodo Similarity e sostituirai il metodo scorePayload() per decodificare quell'aumento e quindi usa PayloadTermQuery che ti consente di contribuire al punteggio basato sugli scarichi che hai nel carico utile per quel termine.

+0

Grazie, proverò a cercare un esempio basato su quelle classi e metodi che hai notato qui. – epeleg

+0

È anche possibile limitare questi boost di carico utile solo ai termini in un campo particolare (ad esempio "tag")? – RalfB

Problemi correlati