Solr DIH delta-import с составными первичными ключами?
Мой источник данных Solr - это база данных SQL, где первичный ключ является составным (то есть это два поля).
Это хорошо для моего основного DIH query
Я просто объединяю поля, и это становится моим первичным ключом Solr. Однако из документации неясно, как я написал бы запрос дельта-импорта для поддержки этого.
Документация предполагает, что мне нужно два запроса - один для поиска первичного ключа измененных строк, а другой для фактического извлечения отдельных документов, соответствующих каждому из этих ключей. Там нет примера, показывающего это для составных ключей, хотя.
В идеале я не хочу, чтобы эти два отдельных запроса вообще были бы, это привело бы к меньшей нагрузке на базу данных, если бы эти два запроса были просто объединены так, чтобы единственная разница между query
а также deltaQuery
это WHERE
пункт, который фильтрует на основе last_changed
,
Так что, если мой главный query
является:
SELECT key1 || key2 as pk FROM table
Что бы соответствующие deltaQuery
(И / или deltaImportQuery
) выглядит как?
Я пытался просто добавить WHERE
пункт, но после выполнения запроса я получил предупреждение о пропавшем deltaImportQuery
и затем исключение нулевого указателя.
3 ответа
query="SELECT key1 || key2 as id, ...other fields FROM table"
deltaImportQuery="SELECT key1 || key2 as id, ... other fields
FROM table
where key1 = '${dataimporter.delta.key1}'
and key2 = '${dataimporter.delta.key2}'"
deltaQuery="SELECT key1 || key2 as id, key1, key2
FROM table
WHERE lastUpdated > '${dataimporter.last_index_time}'"
Предполагая, что key1 и key2 являются текстом. Одинарные кавычки вокруг ${dataimporter.delta.key2} не понадобятся, если key2, например, числовой.
Установите для deltaQuery значение "select 1", которое вызовет deltaImportQuery, а затем просто напишите свой deltaImportQuery с помощью ${dataimporter.last_index_time}'в предложении where
so deltaQuery = "select 1" deltaImportQuery = "select * from a_table, где lastUpdated > '${dataimporter.last_index_time}'"
Существует два запроса для deltaImport. Первый (deltaQuery) предназначен для определения того, что индексировать. Например, в нем мы можем определить, какой идентификатор нам нужно индексировать. Другой предназначен для определения данных из этих идентификаторов. Посмотрите на мой пример, надеюсь, он вам поможет
<entity name="address" pk="address_id" query="SELECT * FROM address a" deltaImportQuery="SELECT * FROM address a where a.address_id > ${dataimporter.delta.id}"
deltaQuery="select address_id as id from address where address_id=101010">
Важной частью deltaImportQuery является ${dataimporter.delta.id}. Вот как мы устанавливаем наш идентификатор из deltaQuery в deltaImportQuery.