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