0

我在我的 solr 项目中使用以下代码:

<document>
<entity name="node" dataSource="opennms" query="select * from node" deltaImportQuery="select * from node">
<field column="foreignid" name="id"/>
<field column="nodelabel" name="label"/>
</entity>
<entity name="service" dataSource="opennms" query="select * from service" deltaImportQuery="select * from service">
<field column="serviceid" name="id"/>
<field column="servicename" name="service_name"/>
</entity>
</document>

在某些情况下,两个实体的 id 是相同的。问题是当我尝试导入数据时,第一个表中的 id 被第二个表中的 id 覆盖。有没有一种方法可以让我同时获得这两者?

4

2 回答 2

4

我认为这完全正常,因为 solr 模式中的 id 列被声明为 uniquekey。当我们遇到同样的问题时,我们所做的解决方法是将表名与 id 连接起来以使其唯一。在你的追逐中,类似:

select concat('node-', id) as nodeId from node

select contact('service-', id) as serviceId from service

concat函数会因您使用的数据库类型而异。

于 2012-06-14T05:59:07.697 回答
0

Solr 中的 ID 必须是唯一的。如果您插入具有相同 ID 的实体,则先前的记录将被覆盖。
Solr 不更新记录。它删除并重新插入记录。
如果您想要这两条记录,请定义一个唯一的 ID。
例如,将节点和服务添加到 id,这样节点和服务就不会相互覆盖。

SELECT A.*, 'NODE_' || ID PRIMARY_ID FROM NODE A

SELECT A.*, 'SERVICE_' || ID PRIMARY_ID FROM SERVICE A
于 2012-06-14T06:00:43.117 回答