首页 文章

更改产品数据时更新Solr Index

提问于
浏览
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();

         }

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

我的问题是:

  • 这会重新整理Solr索引数据吗?或者只更新已更改/新的数据?怎么样?即使它只更新已更改/新数据,它如何知道更改了哪些数据?对于大型数据集,这必须存在一些问题 .

  • 跟踪自上次提交以来发生了哪些变化的替代方法是什么,有没有办法将这些产品添加到已更改的Solr索引中 .

  • 当我们将现有记录更新为solr时会发生什么?它是否删除旧数据并插入新数据并重新创建整个索引?这种资源密集吗?

  • 电子商务零售商如何使用数百万种产品做到这一点 .

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

1 回答

  • 4
    • 当您仅更新该记录时,将删除并插入该记录 . Solr不会更新记录 . 其他记录没有动过 . 提交数据时,将使用此新数据创建新段 . 在优化时,数据被优化为单个段 .

    • 您可以使用增量构建技术在上次构建后添加/更新记录 . DIH提供它out of the box,如果您通过作业手动处理它,您可以维护时间戳并运行构建 .

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

    • Solr可以处理任何数量的数据 . 如果数据超出单个机器的处理能力,则可以使用Sharding .

相关问题