如何更新solr索引?

Upv*_*ote 13 solr

当用户创建文档时,我将日期添加到solr索引.每次数据更改如编辑或删除时,我是否必须重新索引整个数据?

在这种情况下,reindex意味着什么?当我做

$this->indexData(array(
        'id' => $pid,
        'title' => $data['titel']
));
Run Code Online (Sandbox Code Playgroud)

对于每个文档而言$solr->addDocuments,是否只覆盖现有数据?

我试图在添加/删除/编辑时重新索引整个索引但在删除某个字段后,它的信息似乎仍然在索引中.

有任何想法吗?

mor*_*rja 24

将文档索引到solr时,它将覆盖任何现有文档<uniqueKey/>(通常是id).所以是的,它会覆盖现有数据.

当您想要更改文档的单个字段时,您必须重新索引整个文档,因为solr不支持仅更新字段.因此,当您删除字段时,您必须在没有字段的情况下重新索引文档.这将覆盖现有数据.不要忘记commit最后送一个.

使用Solr 4,您可以更新文档的单个字段.请参阅Atomic_Updates


Tra*_*lie 5

++以上.

此外,如果您有大量此类更改,则存在潜在问题:

当您在solr中"更新"文档时(正如Morja所说),这不是"就地"更新.会发生什么是Solr维护其文档的内部查找表,当您更新文档时,它必须保留重定向列表,以便当在倒置索引中命中指向"更新"文档的指针时,它知道转到新文档该文件的版本.

如果你有足够的内存,这很好,但最终Solr需要重建查找,当它耗尽该内存时跟踪所有的变化.这(根据我的经验)会导致意外的减速和不必要的优化.

对你来说可能不是问题,但它对我而言.(每小时更新千次)