我们正在努力在电子商务网站上实施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 回答
当您仅更新该记录时,将删除并插入该记录 . Solr不会更新记录 . 其他记录没有动过 . 提交数据时,将使用此新数据创建新段 . 在优化时,数据被优化为单个段 .
您可以使用增量构建技术在上次构建后添加/更新记录 . DIH提供它out of the box,如果您通过作业手动处理它,您可以维护时间戳并运行构建 .
Solr没有更新操作 . 它将执行删除和添加 . 因此,您必须再次使用完整数据,而不仅仅是更新的字段 . 它不是资源密集型的 . 通常只有Commit和Optimize .
Solr可以处理任何数量的数据 . 如果数据超出单个机器的处理能力,则可以使用Sharding .