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 が 2 番目のテーブルの 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 に答える