Дельта-импорт Solr DataImportHandler

Я использую DataImportHandler для индексации данных в SOLR. Я использовал полный импорт для индексации всех данных в моей базе данных, которая составляет около 10000 продуктов. Теперь я запутался с использованием дельта-импорта? Индексирует ли он новые данные, добавляемые в базу данных на основе интервалов, я имею в виду, что он будет индексировать новые данные, добавленные в мою таблицу, около 10 строк, или он просто обновляет изменения в уже проиндексированных данных.

Может кто-нибудь, пожалуйста, объясните мне это на простом примере, как только сможете.


person Ram    schedule 06.01.2011    source источник


Ответы (3)


DataImportHandler может быть немного сложным. Ваш первоначальный запрос загрузил 10 000 уникальных продуктов. Это загружается, если вы укажете /dataimport?command=full-import. Когда этот импорт выполнен, DIH сохраняет переменную ({dataimporter.last_index_time}), которая является датой/временем последнего импорта.

Чтобы выполнить обновление, вы указываете deltaQuery. deltaQuery предназначен для идентификации записей, которые изменились в вашей базе данных с момента последнего обновления. Итак, вы указываете такой запрос: SELECT product_id FROM sometable WHERE [date_update] >= '${dataimporter.last_index_time}' Это позволит получить все product_id из вашей базы данных, которые были обновлены с момента последнего полного обновления. Следующий запрос (deltaImportQuery), который вам нужно указать, — это запрос, который извлечет полную запись для каждого product_id, полученного на предыдущем шаге.

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

Чтобы выполнить deltaQuery и deltaImportQuery, вы используете /dataimport?command=delta-import

Это большое упрощение всех возможностей, проверьте вики Solr на DataImportHandler, это ОЧЕНЬ мощный инструмент!

person ReDeVries    schedule 19.01.2011
comment
Является ли [date_update] отметкой времени, хранящейся в базе данных? Если это так, не может ли это создать проблемы, когда дата сервера базы данных не совсем синхронизирована с сервером, на котором установлен SOLR? - person mrd3650; 27.12.2011
comment
date_update действительно является временной меткой базы данных. Что происходит, так это то, что эта точная дата хранится на вашем сервере solr и используется для последующего вызова. Никаких проблем с синхронизацией, временная метка базы данных управляет процессом. - person ReDeVries; 15.02.2012
comment
Хорошо, но тогда '${dataimporter.last_index_time}' должен быть установлен на метку времени базы данных нет? Однако, насколько я понимаю, именно SOLR устанавливает переменную ${dataimporter.last_index_time} по завершении индексации. Итак, есть ли способ установить «${dataimporter.last_index_time}» вручную, чтобы отразить время базы данных? - person mrd3650; 15.02.2012
comment
Фактические данные содержатся в файле, который находится в вашем каталоге solr/config. Это текстовый файл с именем dataimport.properties. - person ReDeVries; 15.02.2012
comment
Да, на самом деле я знаю о самом файле, однако разве эта метка времени не выполняется самой SOLR (т.е. когда SOLR заканчивает импорт, SOLR берет текущую метку времени своего сервера и помещает ее в этот файл нет?) - person mrd3650; 15.02.2012

В другой заметке:

Когда вы используете дельта-импорт в течение небольшого промежутка времени (например, пару раз за несколько секунд), а сервер базы данных находится на другом компьютере, кроме службы индекса solr, убедитесь, что systemtime обоих компьютеров совпадает, поскольку временная метка из [date_update] создается на сервере базы данных, а dataimporter.last_index_time — на другом.

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

person JiDo    schedule 07.09.2012

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

person Mike Klostermeyer    schedule 26.07.2012