5

我正计划从网页中提取(基本上是在获得许可的情况下抓取)一些数据并将其存储在 elasticsearch 中(你知道,用于搜索)。

虽然我有权从网站上抓取数据,

  • 此数据没有 API 或其他结构化来源
  • 它是手动直接编写成 HTML
  • 没有唯一标识符可以将一个条目与另一个条目区分开来(我基本上将从 DOM 中提取大约 1,000-5,000 个条目)。

当我将它存储在 es 中时,我打算将它放入一个索引和映射类型中,比如thing.

但是,随着时间的推移,源(HTML 网页)可能会随着它们添加/删除/更改其中一些条目的内容而发生变化。由于源中没有标识符,因此我无法轻松识别新的标识符(更糟糕的是,已删除或更改的标识符)。

我想让我的 es 索引保持最新,我想的是某种蓝绿色机制:

  • 我根据源更改的速度按某个计划(每天/每周)运行提取过程
  • 每次运行该过程都会产生另一个索引(或者可能完全是一个新的集群)。假设当前索引是index-prod,流程构建的新索引是index-rc(候选版本)
  • index-rc基于一些启发式方法进行验证(对条目数量的灵活速度检查、我们知道应该工作的示例查询等)
  • 如果它是有效的,它要么:
    • A. 慢慢地将查询翻转到新的集群/索引中
    • 或 B. 一次性翻转到新的集群/索引

我计划使用AWS Elastisearch Service托管 elasticsearch 集群,并且可能使用Route 53 CNAME(也许是 ELB?)来设计一些东西,但我想知道 elasticsearch 本身是否有更隐含的支持来做到这一点?

本质上,我想将一个索引的数据交换为另一个。

4

3 回答 3

3

您不需要在索引之间交换整个数据...如果我做对了,您可以使用Aliases从实际版本更改为下一个索引版本。

为了慢慢改变查询端点,我还假设一些负载均衡器,比如 nginx,是最好的解决方案。网上有很多这样的案例。

于 2016-11-02T17:31:45.963 回答
1

我认为您可以为此使用Reindex API

于 2016-11-02T17:24:54.920 回答
0

我从 Stackoverflow 之外的另一个来源听到了这个消息。

  • 索引别名解决了这个问题。

  • 这是时间序列数据的常见情况。ES 时间序列文档中记录了原子交换索引、将一个标记为当前索引并清除旧索引的示例。

于 2016-11-02T17:29:00.490 回答