1

SOLRでデータのインデックスを作成するためにDataImportHandlerを使用しています。フルインポートを使用して、データベース内の約10000の製品であるすべてのデータにインデックスを付けましたが、デルタインポートの使用法と混同していますか?データベースに追加された新しいデータに間隔ベースでインデックスを付けますか?つまり、テーブルに追加された新しいデータを約10行でインデックス付けするのでしょうか、それともすでにインデックス付けされたデータの変更を更新するだけでしょうか。

誰かができるだけ早く簡単な例でそれを私に説明してもらえますか?

4

3 に答える 3

4

DataImportHandlerは少し気が遠くなる可能性があります。最初のクエリで10.000個のユニークな商品が読み込まれました。/ dataimport?command = full-importを指定すると、これがロードされます。このインポートが完了すると、DIHは、このインポートを最後に行った日時である変数({dataimporter.last_index_time})を格納します。

更新を行うには、deltaQueryを指定します。deltaQueryは、最後の更新以降にデータベースで変更されたレコードを識別することを目的としています。したがって、次のようなクエリを指定します。SELECT product_id FROM sometable WHERE [date_update]> ='$ {dataimporter.last_index_time}'これにより、最後の完全更新以降に更新されたすべてのproduct_idがデータベースから取得されます。指定する必要がある次のクエリ(deltaImportQuery)は、前の手順で取得した各product_idの完全なレコードを取得するクエリです。

product_idが一意のキーであるとすると、solrは既存のレコードを更新する必要があることを認識し、product_idが機能しない場合はレコードを追加します。

deltaQueryとdeltaImportQueryを実行するには、/ dataimport?command=delta-importを使用します

これはすべての可能性を大幅に簡略化したものです。DataImportHandlerのSolrwikiを確認してください。これは、非常に強力なツールです。

于 2011-01-19T21:48:33.203 に答える
3

別の注意事項:

短い時間枠 (数秒間に数回など) でデルタ インポートを使用し、データベース サーバーが solr インデックス サービス以外のマシン上にある場合はsystemtime、両方のマシンのタイムスタンプが一致していることを確認してください。[date_update]データベース サーバー上でdataimporter.last_index_time生成され、もう一方のサーバー上で生成されます。

そうしないと、時差に応じてインデックスを更新しません (または更新しすぎます)。

于 2012-09-07T15:12:31.553 に答える
0

データ インポート ハンドラーがこの状況を処理できることに同意します。DIH の重要な制限の 1 つは、要求をキューに入れないことです。この結果、DIH がインデックス作成で「ビジー」の場合、再び「アイドル」になるまで、将来のすべての DIH 要求が無視されます。スキップされた DIH 要求は失われ、実行されません。

于 2012-07-26T17:30:13.377 に答える