字段ID在solr中被覆盖

时间:2012-06-14 05:36:26

标签: solr dataimporthandler

我在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覆盖。有没有办法让我可以同时获得这两种?

2 个答案:

答案 0 :(得分:4)

我认为这完全正常,因为solr架构中的id列被声明为uniquekey。我们在遇到相同问题时所做的工作是将表名与id连接起来以使其唯一。在你的追逐中,如:

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

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

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

答案 1 :(得分:0)

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

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

SELECT A.*, 'SERVICE_' || ID PRIMARY_ID FROM SERVICE A