具有可选子实体的 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 =
有没有办法处理这种情况?
I'm configuring DataImportHandler
to index my db but I run into this problem.
I have a table A with a nullable integer field F that is the fk to another table (call it B).
I was modeling this way:
...
<entity name="main" query="select ..., F from A">
...
<entity name="sub" query="select ... form B where Id = ${main.F}">
...
</entity>
<entity>
...
The problem is that when F is NULL i get a runtime error because ${main.F} get replaced with nothing and it try to execute the following query:
select ... from B where Id =
Is there a way to handle this situation?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是否有原因不能使用“WHERE F is NOT NULL”,
或者您可以在 sql 中使用立即 if 将 F 替换为一些未使用的值。
使用 OnError =SKIP 将类似于 "WHERE F is NOT NULL" ,但是在 sql 中使用 IF 替换为未使用的值将确保主要部分仅被索引而忽略 esub 部分(如果这是您的要求)。
is there a reason where you cannot use "WHERE F is NOT NULL",
alternatively you can replace F with some unused value using immedate if in sql.
using OnError =SKIP will be similar to "WHERE F is NOT NULL" , but usng IF in sql to replace with an unused value will ensure the main part is indexed only ignoring th esub part, if that is your requirement.
我们使用数据导入处理程序,但坦率地说还没有遇到过这种情况。
可能您想尝试实体的 onError 属性,这将允许您在发生错误时跳过或继续。
http://wiki.apache.org/solr/DataImportHandler#Configuration_in_data-config.xml
We use dataimport handler, but frankly haven't come across this scenario yet.
May be you want to try the onError attribute with the entity, which will allow you the skip or continue when an error occurs.
http://wiki.apache.org/solr/DataImportHandler#Configuration_in_data-config.xml
只是为了记录,这是我目前正在使用的解决方案。
我将子实体定义更改为:
这不是最佳解决方案,因为 F 是数字字段,而不是字符串,用 ' 包围它可能会导致某些数据库出现问题(Oracle 中的性能问题)。
Just for record this is the solution I'm using at the moment.
I changed the sub-entity definistion as:
This is not the best solution because F is a numeric field, not a string and surrounding it with ' may cause problems with some databases (performance problem in Oracle).