如何更新solr索引?
当用户创建文档时,我将日期添加到solr索引中。每次数据更改(如编辑或删除)时,我是否必须重新为整个数据编制索引 在这种情况下,reindex是什么意思?当我这样做的时候如何更新solr索引?,solr,Solr,当用户创建文档时,我将日期添加到solr索引中。每次数据更改(如编辑或删除)时,我是否必须重新为整个数据编制索引 在这种情况下,reindex是什么意思?当我这样做的时候 $this->indexData(array( 'id' => $pid, 'title' => $data['titel'] )); 对于每个文档和do$solr->addDocuments,它是否只是覆盖已有的数据 我试图在add/delete/edit上重新索引整个索引
$this->indexData(array(
'id' => $pid,
'title' => $data['titel']
));
对于每个文档和do$solr->addDocuments
,它是否只是覆盖已有的数据
我试图在add/delete/edit上重新索引整个索引,但删除某个字段后,它的信息似乎仍在索引中
有什么想法吗?当您将一个文档索引到solr时,它将用相同的
覆盖任何现有文档,这通常是id。因此,是的,它会覆盖现有数据
当您想要更改文档的单个字段时,您必须重新索引整个文档,因为solr不支持仅更新字段。因此,当您删除一个字段时,您必须重新索引没有该字段的文档。这将覆盖现有数据。不要忘记在最后发送一个commit
使用Solr 4,您可以更新文档的单个字段。请参见上文所述
此外,如果您有大量这样的更改,则存在一个潜在问题:
当您在solr中“更新”文档时(正如Morja所说),这不是“就地”更新。发生的情况是,Solr维护其文档的内部查找表,当您更新文档时,它必须保留重定向列表,以便在反向索引中命中指向“更新”文档的指针时,它知道要转到该文档的新版本
如果您有足够的内存,这是很好的,但最终Solr将需要在耗尽内存时重建查找,以跟踪所有更改。根据我的经验,这会导致意外的减速和不必要的优化
对你来说可能不是问题,但对我来说是。(每小时超过千次更新)问题可能是更新后您没有提交文档(这是一个删除和插入操作),但过于频繁的提交可能会触发优化,因此请小心
您无需重新编制整个数据的索引,但整个文档必须使用更新的文档重建。有了如此大量的更新,您如何防止一个用户覆盖另一个用户的编辑?