Solr DataImportHandler с необязательными суб-сущностями - PullRequest
0 голосов
/ 22 сентября 2011

Я настраиваю DataImportHandler для индексации моей базы данных, но я столкнулся с этой проблемой.

У меня есть таблица A с целым полем, допускающим обнуляемое значение F, которая является fk для другой таблицы (назовите ее B). Я моделировал таким образом:

...
<entity name="main" query="select ..., F from A">
  ...
  <entity name="sub" query="select ... form B where Id = ${main.F}">
    ...
  </entity>
<entity>
...

Проблема в том, что когда F равен NULL, я получаю ошибку времени выполнения, потому что $ {main.F} заменяется ничем, и он пытается выполнить следующий запрос:

select ... from B where Id =

Есть ли способ справиться с этой ситуацией?

Ответы [ 3 ]

1 голос
/ 23 сентября 2011

есть причина, по которой вы не можете использовать «ГДЕ НЕ НУЛЬ»,

в качестве альтернативы вы можете заменить F на какое-то неиспользуемое значение, используя immedate, если в sql.

использование OnError = SKIP будет похоже на «ГДЕ F НЕ НЕДЕЙСТВИТЕЛЕН», но использование IF в sql для замены неиспользуемым значением обеспечит индексацию только основной части, игнорируя только часть esub, если это ваше требование.

0 голосов
/ 20 декабря 2011

Просто для записи, это решение, которое я использую в данный момент.

Я изменил определение подобъекта как:

<entity name="sub" query="select ... form B where Id = '${main.F}'">

Это не лучшее решение, потому что F - это числовое поле, а не строка и окружение его 'может вызвать проблемы с некоторыми базами данных (проблема производительности в Oracle).

0 голосов
/ 23 сентября 2011

Мы используем обработчик dataimport, но, честно говоря, этот сценарий еще не встречался.
Может быть, вы захотите попробовать атрибут onError с сущностью, которая позволит вам пропустить или продолжить при возникновении ошибки.

http://wiki.apache.org/solr/DataImportHandler#Configuration_in_data-config.xml

...