Wydaje się, że Twoje pytanie dotyczy bardziej scalania indeksów niż samego indeksowania.
Proces indeksowania jest dość prosty, jeśli zignorujesz szczegóły niskiego poziomu. Lucene tworzy z dokumentów tzw. „Indeks odwrócony”. Więc jeśli pojawi się dokument z tekstem „Być albo nie być” i id = 1, odwrócony indeks będzie wyglądał następująco:
[to] → 1
[be] → 1
[or] → 1
[not] → 1
To jest w zasadzie to - indeks od słowa do listy dokumentów zawierających dane słowo. Każdy wiersz tego indeksu (słowa) nazywany jest listą ogłoszeń. Indeks ten jest wówczas przechowywany długoterminowo.
W rzeczywistości sprawy są oczywiście bardziej skomplikowane:
- Lucene może pominąć niektóre słowa w oparciu o podany analizator;
- słowa mogą być wstępnie przetwarzane przy użyciu algorytmu ryzacji w celu zmniejszenia fleksji języka;
- lista wysyłkowa może zawierać nie tylko identyfikatory dokumentów, ale także offset danego słowa w dokumencie (potencjalnie w kilku przypadkach) oraz inne dodatkowe informacje.
Istnieje wiele innych komplikacji, które nie są tak ważne dla podstawowego zrozumienia.
Ważne jest jednak, aby zrozumieć, że indeks Lucene jest tylko dodawany . W pewnym momencie aplikacja zdecyduje się zatwierdzić (opublikować) wszystkie zmiany w indeksie. Lucene kończy wszystkie operacje serwisowe indeksem i zamyka go, aby był dostępny do wyszukiwania. Po zatwierdzeniu indeks w zasadzie niezmienny. Ten indeks (lub część indeksu) nazywany jest segmentem . Kiedy Lucene wyszukuje zapytanie, przeszukuje wszystkie dostępne segmenty.
Powstaje więc pytanie - jak zmienić już zindeksowany dokument ?
Nowe dokumenty lub nowe wersje już zindeksowanych dokumentów są indeksowane w nowych segmentach, a stare wersje unieważniane w poprzednich segmentach za pomocą tzw. Listy zniszczeń . Lista zabójstw jest jedyną częścią zatwierdzonego indeksu, która może ulec zmianie. Jak można się domyślić, wydajność indeksowania spada z czasem, ponieważ stare indeksy mogą zawierać głównie usunięte dokumenty.
Tutaj pojawia się łączenie. Merging - to proces łączenia kilku indeksów w celu ogólnego zwiększenia wydajności. Zasadniczo podczas scalania dokumenty na żywo są kopiowane do nowego segmentu, a stare segmenty są całkowicie usuwane.
Korzystając z tego prostego procesu, Lucene jest w stanie utrzymać indeks w dobrym stanie pod względem wydajności wyszukiwania.
Mam nadzieję, że to pomoże.