Я пытаюсь использовать DataImportHandler для синхронизации моего индекса с базой данных SQL (что, на мой взгляд, довольно ванильно). Поскольку моя база данных будет довольно большой, я хочу использовать добавочный импорт, используя этот метод http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImport, поэтому вызовы имеют форму http://localhost:8983/solr/Items/dataimport?command=full-import&clean=false
. Это отлично работает для добавления элементов.
У меня есть отдельная таблица DeletedItems в моей базе данных, которая содержит первичные ключи элементов, которые были удалены из таблицы Items, а также время их удаления. В рамках вызова DataImport я надеялся, что смогу удалить соответствующие элементы из моего индекса на основе запроса в соответствии со строками
SELECT Id FROM DeletedItems WHERE WasDeletedOn > '${dataimporter.last_index_time}'
но я не могу понять, как это сделать. Ссылка выше намекает на это с загадочным
В данном случае это, очевидно, означает, что если вы также хотите использовать deletePkQuery, то при выполнении команды delta-import все равно необходимо.
но установка deletePkQuery для приведенного выше SQL-запроса, похоже, не работает. Затем я прочитал, что deletePkQuery работает только с дельта-импортом, поэтому я вынужден делать два запроса на мой solr-сервер как часть процесса синхронизации? Это кажется неправильным, так как операции параметризуются свойством dataimporter.last_index_time
, которое изменяется. Оба шага должны быть выполнены в одном «атомарном» действии, верно? Есть идеи?