2012-07-03 15 views
6

Quando uso un analizzatore con edgengram (min = 3, max = 7, anteriore) + term_vector = with_positions_offsetselasticsearch - EdgeNgram + evidenziare + term_vector = cattivi riflessi

Con documento di testo = "CouchDB"

quando cerco "couc"

il mio punto forte è il "cou" e non "couc"


sembra che il mio punto forte è solo sul corrispondente gettone minimo "cou" w mi aspetto di essere sul token esatto (se possibile) o almeno sul token più lungo trovato.

Funziona bene senza analizzare il testo con term_vector = with_positions_offsets

Qual è l'impatto della rimozione del term_vector = with_positions_offsets per perfomances?

+0

nessuno ha una soluzione o una risposta sull'impatto di with_positions_offsets? –

risposta

8

Quando si imposta term_vector=with_positions_offsets per un campo specifico, significa che si sta memorizzando il termine vettori per documento, per quel campo.

Quando si tratta di evidenziare, i vettori di termini consentono di utilizzare l'evidenziatore vettore veloce di lucene, che è più veloce dell'evidenziatore standard. Il motivo è che l'evidenziatore standard non ha un modo rapido per evidenziare poiché l'indice non contiene informazioni sufficienti (posizioni e offset). Può solo rianalizzare il contenuto del campo, intercettare gli offset e le posizioni e rendere l'evidenziazione basata su tali informazioni. Questo può richiedere un po 'di tempo, specialmente con lunghi campi di testo.

Utilizzando i vettori di termini, si dispone di informazioni sufficienti e non è necessario riesaminare il testo. Lo svantaggio è la dimensione dell'indice, che aumenterà notevolmente. Devo aggiungere che poiché i vettori di termine di Lucene 4.2 sono meglio compressi e conservati in modo ottimizzato. E c'è anche il nuovo PostingsHighlighter basato sulla possibilità di memorizzare offset nella lista dei messaggi, che richiede anche meno spazio.

elasticsearch utilizza automaticamente il modo migliore per rendere l'evidenziazione basata sulle informazioni disponibili. Se i vettori di termini vengono memorizzati, utilizzerà l'evidenziatore vettoriale veloce, altrimenti quello standard. Dopo aver reindicizzato senza i vettori di termini, l'evidenziazione verrà effettuata utilizzando l'evidenziatore standard. Sarà più lento ma l'indice sarà più piccolo.

Per quanto riguarda i campi ngram, il comportamento descritto è strano poiché l'evidenziatore di vettore veloce dovrebbe avere un supporto migliore per i campi ngram, quindi mi aspetterei esattamente il risultato opposto.

+0

Grazie, quindi conosco l'impatto sulle prestazioni ora. Spero che qualcuno sia in grado di spiegare questo comportamento. Forse è perché la logica di ngram viene applicata anche alla query di ricerca, mentre non dovrebbe? –

+1

Non ci ho pensato, sì, ha senso. Solitamente per ngrams hai una diversa catena di analisi al tempo di interrogazione, senza ngrams.Altrimenti si creano anche ngram della query e si ottengono più risultati del previsto e comportamenti strani. – javanna

+0

ok grazie, dovrei provarlo allora;) –

4

So che questa domanda è vecchio, ma non è stato ancora risposto completamente:

C'è un'altra opzione che può cedere a un comportamento così strano:

È necessario impostare require_field_match a true se non si desidera che gli altri risultati dei documenti influenzino l'evidenziazione del documento corrente, vedere: http://www.elasticsearch.org/guide/reference/api/search/highlighting/

+0

require_field_match riguarda solo i nomi dei campi, non penso che si riferisca a questo caso. Voglio dire che se hai una query sul campo del titolo e evidenzi il titolo e la descrizione, i termini corrispondenti nel campo della descrizione non saranno evidenziati, mentre di default lo sono. – javanna

Problemi correlati