2013-06-11 10 views
0

Я пытался выяснить, как обновить индекс для удаленных записей. Я индексирую базу данных. Я ищу документы в базе данных, помещаю их в массив и индексирую их, создавая SolrInputDocument.Обновление индекса solr с удаленными записями

Итак, я не мог понять, как обновить индекс для удаленных записей (потому что они не существуют в базе данных сейчас).

Я использую расширение php-solr-pecl.

ответ

0

Вам необходимо обработать удаление документов отдельно от Solr.
Solr не будет обрабатывать его для вас.
В случае Incremental, вам необходимо сохранить документы, удаленные из базы данных, а затем запустить запрос удаления для этого, чтобы очистить индекс.
Для этого вам необходимо сохранить флаг времени и удалить флаг для идентификации документов. В случае Full, вы можете просто очистить индекс и перевернуть все.
Однако в случае сбоев вы можете потерять все данные.

Solr DIH обеспечивает немного обработки для одной и той же

0

создать удаления триггера таблицы базы данных, которая будет вставлять удаленный идентификатор записи в другой таблице. (Или иметь boolean поле «deleted» и отметьте запись вместо фактически удаляя его, учитывая компромиссы, я бы выбрал триггер)

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

0

Мы столкнулись с той же проблемой и придумали метод пакетного удаления.

Мы создали программу, которая удалит документ из SOLR на основе uniqueid, если уникальный уникальный идентификатор присутствует в SOLR, но не в базе данных, вы можете удалить этот документ из SOLR.

(Получить UniqueID список из ГУМЗ) минус (UniqueID список из базы данных)

Вы можете просто использовать SQL минус, чтобы получить список UniqueID, принадлежащий к документам, которые необходимо удалить.

Иначе вы можете делать все на стороне JAVA. Получите список из базы данных, получите список из solr .. Сделайте сравнение между 2 списком и удалением на основе этого. Это будет потеряно быстрее для огромного количества документов. Вы можете использовать двоичный метод поиска, чтобы сделать сравнение ..

Что-то вроде

Collections.binarySearch(DatabaseUniqueidArray, "SOLRuniqueid"); 
Смежные вопросы