1

インデックスを作成したデータベースには約 1,000 万件のレコードがあり、db ではなく solr からレコードを取得することで高いパフォーマンスの利点が見られたため、これを実行できたことをうれしく思います。このデータはレポートに使用されます。

現在、インデックスにフラット データを保持しています。例えば:

Itemid, Companyname, Username, Status

たとえば、アイテムのステータスが Received から Sold に変わるとすぐに、solr API を呼び出してレコードを更新します。すべてが非常にうまく機能しています。インデックスはリアルタイムで更新されており、レポートはうまく機能しています。

質問 1: 将来、ユーザーが会社名を会社 A から会社 B に変更したり、ユーザー名をマイクからジミーに変更したりした場合、これをどのように処理すればよいでしょうか?

私の考え

  1. ユーザーと会社の更新イベントをリッスンし、name = old name の solr インデックスのみを更新します

  2. 名前の代わりに会社とユーザーの ID をインデックスに保持します。そして、solr からレコードをフェッチした後、db をもう一度ヒットして、更新された名前を取得します。これは、主要なフィールドがインデックスから取得され、そのようなフィールドのみが db テーブルから取得される混合アプローチになります。

質問 2: solr update を呼び出して、呼び出しごとにステータス遷移のインデックスを更新しています。これを行うためのより良い方法はありますか?将来のパフォーマンス ヒットに関して、またはステータス遷移の頻度が増加した場合に、何か欠けているものはありますか?

質問 3: たとえば、将来、まだインデックスが作成されていない列をレポートにもう 1 つ表示する必要があるとします。それを行うための標準的な許容可能な方法は何ですか?

これについて専門家のアドバイスをよろしくお願いします。

4

1 に答える 1

0

質問 1: 将来、ユーザーが会社名を会社 A から会社 B に変更したり、ユーザー名を Mike から Jimmy に変更したりした場合、これをどのように処理すればよいでしょうか?

同等のケースがあり、solr データ インポート ハンドラを使用しています。DB 側では、LAST_MODIFIED列を追加しました。行が更新されるたびに、DB は LAST_MODIFIED` タイムスタンプを「now」に自動的に変更しました。

Solr 側では、次のようにData Import Request Handlerを呼び出してデータ インポート ジョブを実行します。

http://solrhost:8888/solr/mycore/dataimport?command=full-import&clean=false&optimize=false

その場合、データ インポート リクエスト ハンドラーは、LAST_MODIFIED で where 句を使用して DB クエリを実行します。これを見てください。

このためには、solr で一意の ID を定義していることが重要です。Itemid

質問 2: solr update を呼び出して、呼び出しごとにステータス遷移のインデックスを更新しています。これを行うためのより良い方法はありますか?将来のパフォーマンス ヒットに関して、またはステータス遷移の頻度が増加した場合に、何か欠けているものはありますか?

質問 1 を参照してください。別の方法ですが、こちらの方が速いかどうかはわかりません。

質問 3: たとえば、将来、まだインデックスが作成されていない列をレポートにもう 1 つ表示する必要があるとします。それを行うための標準的な許容可能な方法は何ですか?

私にとっては、新しいフィールドをsolrに追加し、solrを再起動することです。おそらく、すべてのドキュメントのインデックスを再作成します。既存のドキュメントも追加情報を取得する場合は、再インデックスが必要です。

于 2013-07-18T09:04:07.573 に答える