Как переиндексировать все документы в данных Solr - PullRequest
15 голосов
/ 29 мая 2011

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

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

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

Ответы [ 4 ]

13 голосов
/ 30 мая 2011

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

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

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

2 голосов
/ 13 марта 2013

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

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

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

2 голосов
/ 29 июля 2011

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

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

0 голосов
/ 19 января 2014

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

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

curl http://<solr_host>:<port>/solr/<core_name>/update -F stream.body=' <optimize />'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...