Здається, ваше питання більше стосується злиття індексів, аніж самого індексування.
Процес індексації досить простий, якщо ви ігноруєте деталі низького рівня. Люцен утворюють те, що називається "перевернутий індекс" з документів. Отже, якщо надходить документ із текстом "Бути чи не бути" та id = 1, інвертований індекс буде виглядати так:
[to] → 1
[be] → 1
[or] → 1
[not] → 1
В основному це все - індекс від слова до списку документів, що містять дане слово. Кожен рядок цього індексу (слова) називається списком проводки. Тоді цей індекс зберігається на довготривалому зберіганні.
Насправді, звичайно, все складніше:
- Люцен може пропускати деякі слова на основі конкретного даного Аналізатора;
- слова можуть бути попередньо оброблені за допомогою алгоритму стерміну для зменшення гнучкості мови;
- Список проводки може містити не тільки ідентифікатори документів, але також зміщення даного слова всередині документа (потенційно кілька екземплярів) та деяку іншу додаткову інформацію.
Є набагато більше ускладнень, які не так важливі для базового розуміння.
Важливо розуміти, що індекс люцену додається лише . У певний момент часу програма вирішує зафіксувати (опублікувати) всі зміни в індексі. Люцен закінчує всі сервісні операції індексом і закриває, щоб він був доступний для пошуку. Після коміту індекс в основному незмінний. Цей індекс (або індексна частина) називається сегментом . Коли Lucene виконує пошук запиту, він здійснює пошук у всіх доступних сегментах.
Тож виникає питання - як ми можемо змінити вже проіндексований документ ?
Нові документи або нові версії вже проіндексованих документів індексуються в нових сегментах, а старі версії втрачають силу в попередніх сегментах за допомогою так званого списку вбивств . Список вбивств - це єдина частина фіксованого індексу, яка може змінюватися. Як можна здогадатися, ефективність індексів з часом падає, оскільки старі індекси можуть містити переважно видалені документи.
Тут відбувається злиття. Об’єднання - це процес об’єднання кількох індексів, щоб зробити загальний індекс ефективнішим. Що відбувається в основному під час злиття - це поточні документи, скопійовані в новий сегмент, і старі сегменти повністю видаляються.
Використовуючи цей простий процес, Lucene може підтримувати індекс у належній формі з точки зору ефективності пошуку.
Сподіваюся, це допоможе.