複数のデータベースを 1 つの solr インデックスにインデックス付けしようとしています。複数のデータソースでsolr wikiを読んで、さまざまな種類の設定をいじろうとしましたが、望ましい結果を得ることができません.
私の構成は次のようになります。
<dataConfig>
<!-- Has 10000 items -->
<dataSource name="ds1" driver="org.h2.Driver" url="jdbc:h2:file:/path/to/first" />
<!-- Has ~7000 items -->
<dataSource name="ds2" driver="org.h2.Driver" url="jdbc:h2:file:/path/to/second" />
<document name="myDocName">
<entity name="firstEntity" rootEntity="true"
dataSource="ds1" query="SELECT * FROM BLAH"
transformer="my.Transformer" threads="4">
... <!-- field configuration here -->
</entity>
<entity name="secondEntity" rootEntity="true"
dataSource="ds2" query="SELECT * FROM BLAH"
transformer="my.Transformer" threads="4">
... <!-- field configuration here -->
</entity>
</document>
</dataConfig>
今、私たちは現在テストデータを扱っているので、各データベースにいくつのレコードがあるかがわかります.最初のレコードには〜7000が含まれ、2番目のレコードには10000が含まれています.インデックス作成を開始すると、〜17000の追加があるという情報メッセージが表示されます:
INFO: {deleteByQuery=*:*,add=[5, 1, 2, 6, 7, 4, 8, 3, ... (17069 adds)],commit=} 0
ただし、Web インターフェイスで * : * クエリを実行すると、10000 の結果しか得られません (これは、最大のデータベース内のアイテムの数とまったく同じです。これは、7096 のドキュメントがそこに存在し、残りは 1 つだけであることを示唆しているようです。
構成ファイル内の要素を文書化しようとしましたが、インポートされたのは 1 つだけでした (おそらく同じ名前、つまり、2 つの文書要素に対して document name="myDocName" が同じように構成されたため)。
この時点で、私は立ち往生しており、これを適切に構成する方法がわかりません。さらに考えられる唯一のことは、両方のデータベースに個別にインデックスを作成する必要があるということですが、このワークフローも完全には明確ではありません。どんな助けでも大歓迎です。
更新 1:両方のエンティティに異なる名前を付けてみました (とにかくドキュメントに従って必要なもの) が、これにより次の動作が発生します。最初のドキュメントが最初のデータベースから追加され、次に最初の N 個の既存のドキュメントが 2 番目のデータベースのドキュメントで上書きされます。N は 2 番目のデータベースのレコード数です。明らかに、これは私が望むものではありません。N 個の追加ドキュメントが必要です。構成に 2 番目のドキュメント要素を追加しても機能しないようです。
更新 2:このバグ レポートのコメントによると: https://issues.apache.org/jira/browse/SOLR-895、ドキュメント タグのルート エンティティは、これらのエンティティの新しいドキュメントになるはずです。これは私に起こっていることではありません。各エンティティ タグに明示的に rootEntity="true" を設定しても、何も変更されません。結果は、インポート後、予想される 17000 の代わりに 10000 のドキュメントしかないということです。