2012-06-14 29 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