1

私たちはeコマースサイトでのSolrの実装に取り​​組んでいます。サイトは、既存の製品情報を更新するか、新しい製品を完全に追加することにより、新しいデータで継続的に更新されます。

solrnetを使用してasp.netmvc3アプリケーションで使用しています。

インデックス作成の問題に直面しています。現在、以下を使用してコミットを行っています。

private static ISolrOperations<ProductSolr> solrWorker;
         public void ProductIndex()
         {
             //Check connection instance invoked or not
             if (solrWorker == null)
             {
                  Startup.Init<ProductSolr>("http://localhost:8983/solr/");
                  solrWorker = ServiceLocator.Current.GetInstance<ISolrOperations<ProductSolr>>();

             }
             var products = GetProductIdandName();
             solrWorker.Add(products);
             solrWorker.Commit();

         }

これは単純なテストアプリケーションですが、製品名とIDだけをsolrインデックスに挿入しました。実行するたびに、新製品は一度に更新され、検索すると利用可能になります。これにより、実行するたびにsolrに新しいデータインデックスが作成されると思いますか?私が間違っている場合は私を訂正してください。

私の質問は:

  1. これにより、Solrインデックスデータ全体が再作成されますか?または、変更/新規のデータを更新するだけですか?どのように?変更された/新しいデータのみを更新する場合でも、どのデータが変更されたかをどのように知るのでしょうか。大規模なデータセットでは、これにはいくつかの問題が必要です。
  2. 前回のコミット以降に変更されたものを追跡する別の方法は何ですか。また、変更されたSolrインデックスにそれらの製品を追加する方法はありますか。
  3. 既存のレコードをsolrに更新するとどうなりますか?古いデータを削除して新しいデータを挿入し、インデックス全体を再作成しますか?このリソースは集中的ですか?
  4. 何百万もの製品を使ってこれを行うeコマース小売業者の規模。

この問題を解決するための最良の戦略は何ですか?

4

1 に答える 1

4
  1. 更新を行うと、そのレコードのみが削除および挿入されます。Solrはレコードを更新しません。他のレコードは変更されていません。データをコミットすると、この新しいデータを使用して新しいセグメントが作成されます。最適化すると、データは単一のセグメントに最適化されます。

  2. インクリメンタルビルド手法を使用して、最後のビルド後にレコードを追加/更新できます。DIHは、箱から出してすぐにそれを提供します。ジョブを介して手動で処理している場合は、タイムスタンプを維持してビルドを実行できます。

  3. Solrには更新操作はありません。削除と追加を実行します。したがって、更新されたフィールドだけでなく、完全なデータを再度使用する必要があります。リソースを大量に消費しません。通常、CommitとOptimizeのみがあります。

  4. Solrは任意の量のデータを処理できます。データが単一のマシンの処理能力を超えて大きくなった場合は、シャーディングを使用できます。

于 2012-06-12T13:41:10.087 に答える