Как обновить индекс Solr? - PullRequest
13 голосов
/ 11 марта 2011

Когда пользователь создает документ, я добавляю дату в индекс solr. Каждый раз, когда данные изменяются, такие как редактирование или удаление, нужно ли переиндексировать все данные?

Что означает в этом случае переиндексация? Когда я делаю

$this->indexData(array(
        'id' => $pid,
        'title' => $data['titel']
));

для каждого документа и введите $solr->addDocuments, он просто перезаписывает уже существующие данные?

Я пытался переиндексировать весь индекс при добавлении / удалении / редактировании, но после удаления определенного поля его информация все еще находится в индексе.

Есть идеи?

Ответы [ 3 ]

24 голосов
/ 11 марта 2011

Когда вы индексируете документ для поиска, он перезапишет любой существующий документ с тем же <uniqueKey/>, который обычно является идентификатором. Так что да, он перезаписывает существующие данные.

Когда вы хотите изменить одно поле документа, вам придется переиндексировать весь документ, так как solr не поддерживает только обновление поля. Поэтому, когда вы удаляете поле, вам придется переиндексировать документ без поля. Это перезапишет существующие данные. Не забудьте отправить commit в конце.

С Solr 4 вы можете обновить отдельное поле документа. Смотрите Atomic_Updates

5 голосов
/ 12 марта 2011

++ и выше.

Кроме того, если у вас большой объем таких изменений, то есть потенциальная проблема:

Когда вы 'ОБНОВЛЯЕТЕ' документ в solr (какМоря говорит) это не обновление на месте.Что происходит, так это то, что Solr поддерживает внутреннюю таблицу поиска для своих документов, и когда вы обновляете документ, он должен вести список перенаправлений, чтобы при попадании указателя на «обновленный» документ в инвертированный индекс он знал, что нужно перейти к новому.версия этого документа.

Это хорошо, если у вас достаточно памяти, но в конечном итоге Solr потребуется перестроить поиск, когда он использует эту память, отслеживая все изменения.Это (по моему опыту) вызывает неожиданные замедления и нежелательные оптимизации.

Возможно, это не проблема для вас, но это было для меня.(тысяча + обновлений в час)

0 голосов
/ 23 декабря 2013

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

Вам не нужно переиндексировать целые данные, а целыедокумент должен быть перестроен с обновленным документом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...