Мы ищем некоторые рекомендации по систематической переиндексации в Solr постоянно растущего корпуса документов (десятки миллионов сейчас, сотни миллионов через год) без закрытия текущего индекса. Переиндексация необходима на периодической основе, потому что:
- Введены новые функции для поиска в существующем корпусе, которые требуют дополнительных полей схемы, которые мы не всегда можем предвидеть заранее.
- Корпус индексируется по нескольким сегментам. Когда он превысит определенный порог, нам нужно создать больше сегментов и равномерно сбалансировать документы для всех из них (похоже, что SolrCloud пока не поддерживает).
Текущий указатель получает очень частые обновления и дополнения, которые должны быть доступны для поиска в течение нескольких минут. Поэтому подходы, при которых корпус переиндексируется в пакетном режиме в автономном режиме, на самом деле не работают, поскольку к моменту завершения пакета новые документы будут доступны.
В настоящее время мы рассматриваем следующие подходы:
- Создайте новый кластер шардов и выполните пакетную переиндексацию там, пока старый кластер еще доступен для поиска. Новые документы, не входящие в переиндексированный пакет, отправляются как в старый, так и в новый кластер. Когда будете готовы к переключению, направьте балансировщик нагрузки на новый кластер.
- Используйте CoreAdmin: создайте новое ядро для каждого шарда и отправьте переиндексированную партию на новые ядра. Новые документы, не входящие в переиндексированный пакет, отправляются как в старые, так и в новые ядра. Когда будете готовы к переключению, используйте CoreAdmin для динамического переключения ядер.
Мы были бы признательны, если бы люди могли либо подтвердить, либо найти дыры в одном или во всех этих подходах. Является ли один более подходящим, чем другой? Или мы совсем запутались? Заранее спасибо.