具有可选子实体的 Solr DataImportHandler

发布于 2024-12-06 07:38:21 字数 462 浏览 1 评论 0原文

我正在配置 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

忆离笙 2024-12-13 07:38:21

是否有原因不能使用“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.

迎风吟唱 2024-12-13 07:38:21

我们使用数据导入处理程序,但坦率地说还没有遇到过这种情况。
可能您想尝试实体的 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

栖竹 2024-12-13 07:38:21

只是为了记录,这是我目前正在使用的解决方案。

我将子实体定义更改为:

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

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

Just for record this is the solution I'm using at the moment.

I changed the sub-entity definistion as:

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

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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文