具有可选子实体的Solr DataImportHandler

时间:2011-09-22 09:48:11

标签: solr dataimporthandler

我正在配置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 个答案:

答案 0 :(得分:1)

有一个原因是你不能使用“WHERE F is NOT NULL”,

或者,如果在sql中,你可以使用immedate替换一些未使用的值。

使用OnError = SKIP将类似于“WHERE F is NOT NULL”,但是在sql中使用ifng IF替换为未使用的值将确保主要部分仅在忽略esub部分的情况下编入索引,如果这是您的要求。 / p>

答案 1 :(得分:0)

我们使用dataimport处理程序,但坦率地说还没有遇到过这种情况 可能您想尝试使用实体的onError属性,这将允许您在发生错误时跳过或继续。

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

答案 2 :(得分:0)

仅供记录,这是我目前正在使用的解决方案。

我将子实体定义更改为:

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

这不是最好的解决方案,因为F是一个数字字段,而不是一个字符串,并且可能会导致某些数据库出现问题(Oracle中的性能问题)。