我正计划从网页中提取(基本上是在获得许可的情况下抓取)一些数据并将其存储在 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 本身是否有更隐含的支持来做到这一点?
本质上,我想将一个索引的数据交换为另一个。