Solr DIH delta-import с составными первичными ключами? - PullRequest
6 голосов
/ 22 декабря 2009

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

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

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

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

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

SELECT key1 || key2 as pk FROM table

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

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

Ответы [ 3 ]

3 голосов
/ 11 апреля 2012
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, например, числовой.

0 голосов
/ 24 февраля 2012

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

so deltaQuery = "выберите 1" deltaImportQuery = "select * from a_table, где lastUpdated> '$ {dataimporter.last_index_time}'"

0 голосов
/ 23 декабря 2009

Есть два запроса для 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.

...