Sembra che la tua domanda sia più sull'unione degli indici che sull'indicizzazione stessa.
Il processo di indicizzazione è abbastanza semplice se ignori i dettagli di basso livello. Lucene forma quello che viene chiamato "indice invertito" dai documenti. Quindi, se arriva un documento con il testo "Essere o non essere" e id = 1, l'indice invertito sarebbe simile a:
[to] → 1
[be] → 1
[or] → 1
[not] → 1
Fondamentalmente è questo: l'indice dalla parola all'elenco dei documenti contenenti una data parola. Ogni riga di questo indice (parola) è chiamata lista dei messaggi. Questo indice viene quindi mantenuto per l'archiviazione a lungo termine.
In realtà ovviamente le cose sono più complicate:
- Lucene può saltare alcune parole basate sul particolare Analizzatore fornito;
- le parole possono essere preelaborate utilizzando l'algoritmo di stemming per ridurre la flessibilità del linguaggio;
- la lista dei messaggi può contenere non solo gli identificatori dei documenti, ma anche l'offset della parola data all'interno del documento (potenzialmente diverse istanze) e alcune altre informazioni aggiuntive.
Ci sono molte altre complicazioni che non sono così importanti per la comprensione di base.
È importante capire, però, che l'indice di Lucene è solo append . A un certo punto l'applicazione decide di eseguire il commit (pubblicare) tutte le modifiche nell'indice. Lucene termina tutte le operazioni di servizio con index e lo chiude, quindi è disponibile per la ricerca. Dopo il commit dell'indice sostanzialmente immutabile. Questo indice (o parte di indice) è chiamato segmento . Quando Lucene esegue la ricerca di una query, cerca in tutti i segmenti disponibili.
Quindi sorge la domanda: come possiamo modificare il documento già indicizzato ?
Nuovi documenti o nuove versioni di documenti già indicizzati vengono indicizzati in nuovi segmenti e vecchie versioni invalidate in segmenti precedenti utilizzando la cosiddetta kill list . La kill list è l'unica parte dell'indice sottoposto a commit che può cambiare. Come puoi immaginare, l'efficienza dell'indice diminuisce con il tempo, perché i vecchi indici potrebbero contenere per lo più documenti rimossi.
È qui che entra in gioco la fusione. Merging - è il processo di combinazione di diversi indici per rendere l'indice complessivamente più efficiente. Ciò che accade fondamentalmente durante l'unione è che i documenti live vengono copiati nel nuovo segmento e i vecchi segmenti rimossi completamente.
Utilizzando questo semplice processo Lucene è in grado di mantenere l'indice in buona forma in termini di prestazioni di ricerca.
Spero che ti aiuti.