【问题标题】:How to replace a group of documents without "downtime" in Solr?如何在 Solr 中替换一组文档而不会“停机”?
【发布时间】:2015-06-03 15:45:25
【问题描述】:

我有一个 solr 独立服务器(不是 solr 云),保存来自几个不同来源的文档。

通常我需要更新某个来源的文档,通常我通过删除该来源/组中的所有文档并为该来源索引新文档来执行此操作,但这会产生一个时间间隔,我没有该来源的文档来源,这并不理想。 这些文档中的一些可能会从一个更新到另一个保留,一些更改并且可以更新,但有些可能会消失,需要删除。

最好的方法是什么?

有没有办法从源中删除所有文档,但不提交,并且在同一事务索引中再次删除该源,然后才提交? (这不会造成该来源没有信息的时间间隔)

使用核心交换解决方案吗? (或者我是不是太复杂了?)

【问题讨论】:

  • 您的客户是否知道哪些文件需要添加或更新,哪些文件需要删除?如果是,您可以简单地添加要添加或更新的文档(添加具有现有唯一 ID 的文档将覆盖现有文档),并删除需要删除的文档。我认为这将是做你需要的最干净的方式。
  • 是的,但是客户端不知道哪些需要删除
  • 那么在每个文档中都有一个时间戳怎么样,代表它的最后一次添加(即第一次添加,或修改)。您可以对源进行所有更新,提交此操作,然后从该源中删除任何太旧的内容,然后提交删除。它将消除您担心的时间间隔;如果索引一些额外文档的时间间隔是可以的,这将是一个可行的解决方案。
  • 是的,没关系,事实上我已经将它更改为与您建议的非常相似的东西,但使用修订而不是时间戳,(不确定我是否信任时钟)跨度>

标签: solr


【解决方案1】:

似乎您需要一个实时索引,该索引将在您更新索引时继续为查询提供服务,而无需任何停机时间。在某种程度上,您正在部分地重新索引您的数据。

您可以考虑维护两个索引,并使用 ALIASES 与它们进行交互。 检查此链接:https://www.elastic.co/guide/en/elasticsearch/guide/current/multiple-indices.html 虽然它在 Elasticsearch 网站上,但您可以轻松地使用 solr 中的概念。

这是另一个关于如何创建/使用别名的链接 http://blog.cloudera.com/blog/2013/10/collection-aliasing-near-real-time-search-for-really-big-data/

集合别名对于重新索引也很有用——尤其是当 处理静态索引。您可以在新集合中重新索引 同时从现有集合中提供服务。一旦重新索引 完成,您只需交换新集合,然后删除 使用您的读取端别名的第一个集合。

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2012-07-02
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多