Как переинсталлировать все документы в данных 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 />'