架构更改是不是需要重新索引所有 Solr 文档或仅包含已更改架构字段的文档?

Posted

技术标签:

【中文标题】架构更改是不是需要重新索引所有 Solr 文档或仅包含已更改架构字段的文档?【英文标题】:Does schema change require reindex of all Solr documents or just documents containing the changed schema fields?架构更改是否需要重新索引所有 Solr 文档或仅包含已更改架构字段的文档? 【发布时间】:2014-05-29 01:53:51 【问题描述】:

我的 Solr 索引中有数百万个文档。这些文档中只有一千个具有字段 A,我想更改其架构。架构更改包括将 multiValued 从 true 更改为 false,将 stored 从 false 更改为 true,以及将 type 从 text 更改为 string,这些都需要重新指数。重新索引一千个文档需要几分钟,而重新索引所有内容需要几天时间。

Solr wiki (http://wiki.apache.org/solr/HowToReindex) 上的重新索引页面说“您可能需要在开始索引过程之前删除所有文档”,但没有说明何时不这样做。

我可以只删除包含字段 A 的一千个文档并重新索引那一千个,还是我需要在重新索引它们之前删除整个索引(所有文档)?

我已经在一个小的样本索引中测试了“删除少数”场景;并且更新和查询在更改的字段上按预期工作。但是,我不知道我是不是很幸运,并且由于没有删除所有内容而潜伏了一些问题。

【问题讨论】:

【参考方案1】: 如果您为具有相同 ID(在您的 schema.xml 中定义的唯一键)的文档编制索引,则您不必在编制索引之前将其删除。索引具有相同 ID 的文档将覆盖现有文档。

请记住,当您索引具有相同 ID 的文档时,旧文档会自动标记为“已删除”,但不会从索引中物理删除。词向量分析适用于所有文档(包括已删除的文档)

如果您需要物理清理已删除的文档,则需要执行索引“优化”,您可以从 solr 管理界面执行此操作。

如果您对架构进行了更改,则不必为所有内容编制索引。仅对受影响的文档重新编制索引就足够了。

所以如果我在你的位置,我什至不会删除任何东西。我只会重新索引几千个受影响的文档。然后再做优化以清理索引。

【讨论】:

我想将一个字段从字符串更改为长类型,而不是在模式文件中更改类型后如何对其进行索引?

以上是关于架构更改是不是需要重新索引所有 Solr 文档或仅包含已更改架构字段的文档?的主要内容,如果未能解决你的问题,请参考以下文章

Solr 方法来重新索引大型文档语料库

如何在solr中获取lucene索引的版本

如何在 Apache SolR 中索引 pdf/word 文档

Solr搜索引擎索引提交事务日志原子更新

是否可以使用Active Directory过滤SolR结果?

javasolr集群架构