0

複数のデータベースを 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 のドキュメントしかないということです。

4

1 に答える 1

2

一意のキーの競合があると思います。2 つの異なるデータベースで同じ ID を使用していますか? クエリを次のように変更してみてください

 - ds1 - "SELECT "ds1" || id AS id, field1, field2 FROM table1"
 - ds2 - "SELECT "ds2" || id AS id, field1, field2 FROM table2"

マルチスレッド オプション (threads="4") を削除します。シングル スレッドの場合に比べてパフォーマンスが大幅に向上することはなく、安定していません (4.0 リリースで削除されました)。

于 2012-11-06T13:14:49.627 に答える