如何在Solr中重新索引数据而不删除

时间:2019-03-19 13:04:48

标签: solr

是否可以在solr core中为所有文档重新编制索引?

我已将索引时间分析器更改为托管模式中的一个字段

我的solr核心中有大约600 000个文档,而我在其他任何地方都没有此数据。

我应该如何重新索引数据?

2 个答案:

答案 0 :(得分:1)

Solr is an fulltext-index, not an database. So it's best practices to hold your data somwhere else outside solr, like in files or an database.

So your only solution is to export your data from solr, like it is recommended in the comment from @MatsLindh Google will help you, to find a way (or a tool) to dump/export your stored data to JSON or XML (or whatever)

Once you have stored your documents outside solr, reindexing after changing the schema will be easy in the future.

答案 1 :(得分:0)

如果您不想使用导出然后重新索引的方法,则可以使用以下方法,

  1. 转到solr目录,并使用完全相同的配置创建一个新集合(newCollection)。可以使用rsync来实现。

    rsync -avz --exclude data oldCollection/ newCollection
    

    确保在运行rsync时排除数据文件夹。 (建议您在实际运行rsync之前先进行空运行)

  2. 将core.properties文件中的集合名称编辑为newCollection。

  3. 重新启动solr。您应该开始在UI中看到newCollection。
  4. 现在,您可以使用一个简单的脚本将数据从oldCollection复制到newCollection,该脚本可以从oldCollection中批量提取数据并将相同的对象发送到newCollection。 (您可能需要处理从oldCollection收到的 version 字段)
  5. 现在,您可以简单地使用Swap api交换集合以实现此目的。在管理界面上也有一个“交换”按钮:)

尽管恕我直言,我会在这里同意@The Bndr。您应该仅将Solr用作索引。不要将数据存储在文件/数据库中的某个位置。

如本apache solr wiki中所述,

  

使用Solr作为数据源:   除非没有其他选择,否则不要这样做。 Solr并非真的为此角色设计的。尽一切努力确保Solr是稳定的,但是索引确实会因意外情况以及完全不受开发人员控制的事情而损坏。 Solr 4.x和更高版本确实具有NoSQL功能,SolrCloud在实现高可用性方面还有很长的路要走,但是面对任何问题,任何软件都很难实现绝对的数据可靠性,这就是为什么拥有备份始终很重要的原因。 / p>