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.
nessuno ha una soluzione o una risposta sull'impatto di with_positions_offsets? –