私はインデックスをSQLデータベースと同期させるためにDataImportHandlerを使用しようとしています(これはかなりバニラなことです)。私のデータベースはかなり大きいので、このメソッドhttp://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImportを使って増分インポートを使用したいので、呼び出しはhttp://localhost:8983/solr/Items/dataimport?command=full-import&clean=false
の形式になります。これはアイテムを追加するためにはうまくいきます。カスタム完全インポートのSolr削除
私は彼らが削除されたときに伴い、アイテムテーブルから削除されたアイテムの主キーが含まれている私のデータベース内の別々のDeletedItemsテーブルを持っています。 DataImport呼び出しの一部として、私は
SELECT Id FROM DeletedItems WHERE WasDeletedOn > '${dataimporter.last_index_time}'
の線に沿って、クエリに基づいて私のインデックスから関連する項目を削除することができることを望んでいたが、私はこれを行う方法を見つけ出すことはできません。上記のリンクは暗黙のうちにそれを暗示しています
この場合、deletedPkQueryも使用したい場合は、delta-importコマンドを実行する必要があることは明らかです。
上記のSQLクエリにdeletedPkQueryを設定しても動作しないようです。私はその後、deletedPkQueryはデルタインポートでしか動作しないので、同期プロセスの一環としてsolrサーバーに2つの要求を行うことを余儀なくされています。これは、操作が変更されるdataimporter.last_index_time
プロパティによってパラメータ化されているため正しく表示されません。どちらのステップも、必ず1つの「アトミック」アクションで実行する必要があります。何か案は?
返事をありがとうユニオンクエリを使用することができます。私はdelta-importを避けようとしていますが、deltaQueryクエリーで返された各PKのデータベースを呼び出しているようです(n + 1)。 Solrのドキュメントから:「注意:多くの場合、より効率的で、http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImportで説明されている構成を必要とせずに、Solrで文書を更新する代替の方法があります。彼らがそこで説明している方法は、増分インポートではうまく動作しますが、削除をどのように設定するのか分かりません。 –
注:使用されている完全インポートですが、索引をクリアしない*ドキュメントを追加/更新するだけです –
ああ、良い点です。私はその詳細を逃した。私は2つのコマンドを発行しなければならないと思います.1つは完全インポート、もう1つはデルタインポートで削除をトリガーします。フルインポートの削除は、通常、 'clean = true'を使って処理されます。 DeltaQueryViaFullImportで説明されている方法で削除を行うには、手動で削除フィールドを使用して処理しなければなりません。その後、deleteByQueryで削除するか、または削除をトリガーするデルタインポートクエリを通じて削除します。インポート間にいくつの文書を削除しますか? – MatsLindh