1

我正在配置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 =

有没有办法处理这种情况?

4

3 回答 3

1

是否有不能使用“WHERE F is NOT NULL”的原因,

或者,您可以在 sql 中使用 immediate if 将 F 替换为一些未使用的值。

使用 OnError =SKIP 将类似于 "WHERE F is NOT NULL" ,但在 sql 中使用 IF 替换为未使用的值将确保主要部分仅被索引而忽略 esub 部分,如果这是您的要求。

于 2011-09-23T09:00:52.077 回答
0

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

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

于 2011-09-23T08:12:50.250 回答
0

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

我将子实体定义更改为:

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

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

于 2011-12-20T17:05:17.467 回答