1

我们正在努力在电子商务网站上实施 Solr。通过更新现有产品信息或完全添加新产品,该网站会不断更新新数据。

我们在带有 solrnet 的 asp.net mvc3 应用程序上使用它。

我们正面临索引问题。我们目前正在使用以下内容进行提交:

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();

         }

虽然这只是一个简单的测试应用程序,我们在 solr 索引中只插入了产品名称和 id。每次运行时,新产品都会立即更新,并在我们搜索时可用。我认为这在每次运行时都会在 solr 中创建新的数据索引?如我错了请纠正我。

我的问题是:

  1. 这会完全重新创建 Solr 索引数据吗?或者只是更新更改/新的数据?如何?即使它只更新更改/新数据,它如何知道哪些数据已更改?对于大型数据集,这肯定存在一些问题。
  2. 跟踪自上次提交以来发生的变化的替代方法是什么,有什么方法可以将这些产品添加到已更改的 Solr 索引中。
  3. 当我们将现有记录更新到 solr 时会发生什么?它会删除旧数据并插入新数据并重新创建整个索引吗?这是资源密集型的吗?
  4. 大型电子商务零售商如何使用数百万种产品做到这一点。

解决这个问题的最佳策略是什么?

4

1 回答 1

4
  1. 当您进行更新时,仅删除并插入该记录。Solr 不更新记录。其他记录保持不变。当您提交数据时,将使用此新数据创建新段。在优化时,数据被优化为单个段。

  2. 您可以使用增量构建技术在最后一次构建之后添加/更新记录。DIH开箱即用,如果您通过作业手动处理它,您可以维护时间戳并运行构建。

  3. Solr 没有更新操作。它将执行删除和添加。因此,您必须再次使用完整的数据,而不仅仅是更新的字段。它不是资源密集型的。通常只有 Commit 和 Optimize 是。

  4. Solr 可以处理任意数量的数据。如果您的数据增长超出单台机器的处理能力,您可以使用分片。

于 2012-06-12T13:41:10.087 回答