Как переинсталлировать все документы в данных Solr

Я собираюсь изменить некоторые типы полей в схеме, поэтому, похоже, он должен переиндексировать все документы в текущих данных индекса Solr с таким изменением.

Вопрос о том, как "переиндексировать" все документы? Одно из решений, о котором я могу думать, - "запросить" все документы через интерфейс поиска и выгрузить большой файл в XML или JSON, затем преобразовать его во входной формат XML для Solr и снова загрузить его в Solr, чтобы изменить схему произойдет.

Есть ли лучший способ сделать это более эффективно? Спасибо за ваше предложение.

Ответы

Ответ 1

Прежде всего, сброс результатов запроса может не дать вам исходные данные, если у вас есть поля, которые индексируются и не сохраняются. В общем, лучше сохранить копию ввода в SOLR в форме, которую вы можете легко использовать для восстановления индексов с нуля, если вам нужно. В этом случае просто запустите запрос удаления, разместив <delete><query>*:*</query></delete>, затем <commit/>, а затем <optimize/>. После этого ваш индекс пуст, и вы можете добавить новые документы, которые используют новую схему.

Но вы можете ускользнуть от запуска <optimize/> после перезапуска SOLR с новым файлом схемы. Было бы неплохо иметь резервную копию, где вы можете проверить, что она работает для вашей конфигурации.

Существует инструмент Luke, который можно использовать для просмотра и экспорта индексов Lucene. Я никогда не пробовал это сам, но он мог бы помочь вам экспортировать ваши данные, чтобы вы могли reimport его.

Ответ 2

Идея сброса всех результатов запроса может дать вам неполные или недействительные данные, поскольку вы не можете направить все данные в свой индекс.

Хотя идея сохранить копию вашего индекса в форме, в которую вы можете вставить его, будет хорошо работать в ситуации, когда данные не меняются, и это становится более сложным, если вы добавили новое поле к схеме. В такой ситуации вам нужно будет собрать все данные из источника, отформатировать данные в соответствии с новой схемой, а затем вставить их.

Ответ 3

Если количество документов в Solr велико и вам нужно, чтобы сервер Solr был доступен для запроса, можно было бы запустить задание на индексирование для повторного добавления/повторной индексации документов в фоновом режиме.

Полезно ввести новое поле, чтобы сохранить временную метку lastindexed для каждого документа, поэтому в случае любых проблем с индексированием/переиндексацией можно будет идентифицировать ожидание переиндексации документов.

Чтобы улучшить латентность запросов, можно играть с параметрами конфигурации, чтобы сохранить кеши после каждой фиксации.

Ответ 4

Существует PHP script, который выполняет именно это: выборка и повторная установка всех ваших документов Solr, переиндексация их.

Для оптимизации вызовите из командной строки:

curl http://<solr_host>:<port>/solr/<core_name>/update -F stream.body=' <optimize />'