Solr 1.4 Enterprise Search Server рекомендует выполнять большие обновления копии ядра, а затем заменять его на главное ядро. Я выполняю следующие шаги:
- Создайте подготовительное ядро: http://localhost:8983/solr/admin/cores?action=CREATE&name=prep&instanceDir=main
- Выполните обновление индекса, затем выполните фиксацию / оптимизацию в подготовительном ядре.
- Поменяйте местами основное и подготовительное ядро: http://localhost:8983/solr/admin/cores?action=SWAP&core=main&other=prep
- Выгрузить подготовительное ядро: http://localhost:8983/solr/admin/cores?action=UNLOAD&core=prep
Проблема, с которой я столкнулся, заключается в том, что в ядре, созданном на шаге 1, нет данных. Если я собираюсь сделать полный индекс всего и кухонной мойки, это было бы хорошо, но если я просто хочу обновить (большое) подмножество документов - это, очевидно, не сработает.
(Я мог бы объединить ядра, но часть того, что я пытаюсь сделать, - это избавиться от всех удаленных документов, не пытаясь составить их список.)
Есть ли какой-то флаг для действия CREATE, который мне не хватает? Подробности на Solr Wiki для CoreAdmin немного скудны.
Возможное решение: репликация
Кто-то на solr-user предложил использовать репликацию. Чтобы использовать его в этом сценарии (насколько я понимаю), потребуются следующие шаги:
- Создайте новое ядро PREP на основе конфигурации главного ядра.
- Измените конфигурацию ОСНОВНОГО ядра на ведущее
- Измените конфигурацию ядра PREP на подчиненное устройство
- Вызвать / подождать синхронизации?
- изменить конфигурацию ядра PREP, чтобы он больше не был подчиненным
- Выполните обновление индекса, затем зафиксируйте / оптимизируйте ядро PREP.
- Поменять местами ядра PREP и MAIN
Более простой настройкой на основе репликации будет настройка постоянного ядра PREP, которое всегда является главным. ГЛАВНОЕ ядро (на любом количестве серверов) может быть подчиненным для ядра PREP. Индексирование может происходить в ядре PREP так быстро или медленно, как необходимо.
Возможное решение: постоянное ядро PREP и двойное обновление
Еще одна идея, которую я придумал, заключалась в следующем (также включающем постоянное ядро PREP):
- Выполните обновление индекса, затем зафиксируйте / оптимизируйте ядро PREP.
- Поменяйте местами ядра PREP и MAIN.
- Повторите обновление индекса, затем зафиксируйте / оптимизируйте то, что сейчас является ядром PREP. Теперь он имеет те же данные, что и основное ядро (теоретически), и будет готов к следующей операции индексации.