Как обновить индекс solr?

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

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

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

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

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

Любые идеи?

Ответ 1

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

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

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

Ответ 2

++ выше.

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

Когда вы обновляете документ в solr (как говорит Моря), это не обновление на месте. Что происходит, так это то, что Solr поддерживает внутреннюю таблицу поиска в своих документах, и когда вы обновляете документ, он должен сохранять список перенаправления, чтобы при указании на "обновленный" документ в инвертированном индексе он знал, что нужно перейти к новому версии этого документа.

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

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

Ответ 3

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

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