Кажется, ваш вопрос больше о слиянии индексов, чем о самой индексации.
Процесс индексирования довольно прост, если игнорировать низкоуровневые детали. Lucene формируют то, что называют «перевернутым указателем» из документов. Поэтому, если приходит документ с текстом «Быть или не быть» и id = 1, инвертированный индекс будет выглядеть так:
[to] → 1
[be] → 1
[or] → 1
[not] → 1
Это в основном это - индекс от слова к списку документов, содержащих данное слово. Каждая строка этого индекса (слова) называется списком рассылки. Этот индекс сохраняется при длительном хранении.
На самом деле, конечно, все сложнее:
- Lucene может пропустить некоторые слова в зависимости от конкретного заданного анализатора;
- слова могут быть предварительно обработаны с использованием алгоритма stemming для уменьшения флексии языка;
- список рассылки может содержать не только идентификаторы документов, но также смещение данного слова внутри документа (возможно, несколько экземпляров) и некоторую другую дополнительную информацию.
Есть еще много сложностей, которые не так важны для базового понимания.
Важно понимать, что индекс Lucene равен , добавляется только . В какой-то момент приложение решает зафиксировать (опубликовать) все изменения в индексе. Lucene завершает все сервисные операции с индексом и закрывает его, чтобы он был доступен для поиска. Индекс после коммита в основном неизменный. Этот индекс (или часть индекса) называется сегмент . Когда Lucene выполняет поиск по запросу, он выполняет поиск по всем доступным сегментам.
Поэтому возникает вопрос - как мы можем изменить уже проиндексированный документ ?
Новые документы или новые версии уже проиндексированных документов индексируются в новых сегментах, а старые версии аннулируются в предыдущих сегментах с использованием так называемого списка уничтожения . Список убийств - единственная часть подтвержденного индекса, которая может изменяться. Как вы можете догадаться, эффективность индекса со временем падает, поскольку старые индексы могут содержать в основном удаленные документы.
Здесь начинается слияние. Слияние - это процесс объединения нескольких индексов для повышения эффективности индекса в целом. Во время слияния в основном происходит, когда текущие документы копируются в новый сегмент, а старые сегменты удаляются полностью.
Используя этот простой процесс, Lucene может поддерживать индекс в хорошем состоянии с точки зрения эффективности поиска.
Надеюсь, это поможет.