我正在配置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 =
有办法处理这种情况吗?
答案 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中的性能问题)。