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を追加します。あなたが/ dataimportを使用deltaQueryとdeltaImportQueryを実行するために
?コマンド=デルタインポート
これは、すべての可能性の偉大な簡素化され、DataImportHandler上のSolrのwikiをチェックし、それは非常に強力なツールです!
[date_update]にタイムスタンプがデータベースに保存されていますか?もしそうなら、データベースサーバーの日付がSOLRがインストールされているサーバーと正確に同期していないときに問題が発生することはありませんか? – mrd3650
date_updateは実際にはデータベースのタイムスタンプです。この正確な日付はソルバーサーバーに保存され、後続の呼び出しに使用されます。同期に問題はなく、データベースのタイムスタンプはプロセスを駆動します。 – ReDeVries
Okですが、 '$ {dataimporter.last_index_time}'をデータベースのタイムスタンプ番号に設定する必要がありますか?しかし、私の理解から、インデックス作成が終了すると '$ {dataimporter.last_index_time}'変数を設定するのはSOLR自体です。では、$ {dataimporter.last_index_time}を手動で設定してデータベースの時間を反映させる方法はありますか? – mrd3650