2012-06-14 21 views
0

我使用下面的代码在我的Solr项目:域ID被覆盖掉了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

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

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

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

CONCAT功能将在样的数据库,你的使用有所不同。

+0

谢谢,这有帮助! –

+0

@BharathNaidu:如果这解决了你的问题,那么接受答案。 – ryacii

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