【问题标题】:How to update solr index?如何更新 solr 索引?
【发布时间】:2011-03-11 06:59:46
【问题描述】:

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

在这种情况下,重新索引是什么意思?当我这样做时

$this->indexData(array(
        'id' => $pid,
        'title' => $data['titel']
));

对于每个文档并做$solr->addDocuments,它只是覆盖已经存在的数据吗?

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

有什么想法吗?

【问题讨论】:

    标签: solr


    【解决方案1】:

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

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

    使用 Solr 4,您可以更新文档的单个字段。见Atomic_Updates

    【讨论】:

      【解决方案2】:

      ++ 以上。

      此外,如果您有大量这样的更改,那么可能会出现问题:

      当您在 solr 中“更新”文档时(如 Morja 所说),这不是“就地”更新。发生的情况是 Solr 为其文档维护一个内部查找表,当您更新文档时,它必须保留一个重定向列表,以便当在倒排索引中命中指向“更新”文档的指针时,它知道转到新的该文档的版本。

      如果您有足够的内存,这很好,但最终 Solr 将需要在用完该内存时重建查找以跟踪所有更改。这(根据我的经验)会导致意外的减速和不必要的优化。

      对你来说可能不是问题,但对我来说。 (每小时更新数千次)

      【讨论】:

      • 如此大量的更新,如何防止一个用户覆盖另一个用户的编辑?
      【解决方案3】:

      问题可能是您在更新后没有提交文档(它是删除和插入),但过于频繁的提交可能会触发优化,所以要小心。

      您无需重新索引整个数据,但必须使用更新后的文档重新构建整个文档。

      【讨论】:

        猜你喜欢
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多