Дельта-импорт Solr DIH с составными первичными ключами?

Мой источник данных Solr — это база данных SQL, в которой первичный ключ является составным (т. е. это два поля).

Это нормально для моего основного DIH query, я просто объединяю поля, и это становится моим первичным ключом Solr. Однако из документации неясно, как я буду писать запрос дельта-импорта для поддержки этого.

Документация предполагает, что мне нужны два запроса: один для поиска первичного ключа измененных строк, а другой для фактического извлечения отдельных документов, соответствующих каждому из этих ключей. Однако нет примера, показывающего это для составных ключей.

В идеале мне вообще не нужны эти два отдельных запроса, поскольку было бы меньше нагрузки на базу данных, если бы эти два запроса были просто объединены таким образом, что единственная разница между query и deltaQuery заключается в предложении WHERE, которое фильтрует на основе last_changed.

Итак, если мой основной query:

SELECT key1 || key2 as pk FROM table

Как будет выглядеть соответствующий deltaQuery (и/или deltaImportQuery)?

Я попытался просто добавить предложение WHERE, но после выполнения запроса я получил предупреждение об отсутствующем deltaImportQuery, а затем исключение нулевого указателя.


person Alnitak    schedule 22.12.2009    source источник


Ответы (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}'"

Предполагая, что ключ1 и ключ2 являются текстом. Одинарные кавычки вокруг ${dataimporter.delta.key2} не нужны, например, если key2 является числовым.

person Rye    schedule 11.04.2012

Установите для deltaQuery значение «выбрать 1», которое вызовет deltaImportQuery, а затем просто напишите свой deltaImportQuery с «${dataimporter.last_index_time}» в предложении where.

поэтому deltaQuery="выберите 1" deltaImportQuery="выберите * из a_table, где lastUpdated > '${dataimporter.last_index_time}'"

person Eva Lacy    schedule 24.02.2012

Есть два запроса для deltaImport. Первый (deltaQuery) предназначен для определения того, что нужно индексировать. Например, в нем мы можем определить, какой ID нам нужно индексировать. Другой предназначен для определения данных из этого идентификатора. Посмотрите на мой пример, надеюсь, он вам поможет:

<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.

person Yurish    schedule 23.12.2009