删除 Elasticsearch 中的旧条目

Deleting old entries in Elasticsearch

我将在一天中的不同随机时间处理 "crawl" 数据,并将其输入 Elasticsearch。这个位工作得很好。

然而,索引应该只反映在我最近的爬网中发现的内容,我目前没有任何东西可以删除 Elasticsearch 索引中的内容,这些内容是上一次爬网遗留下来的,但在新的爬网中没有找到。

据我所知,我有几个选择:

A) 根据项目的存在时间删除项目。不会工作,因为索引时间是随机的。

B) 删除整个索引并提供新数据。似乎效率不高,并且会给我留下空索引或部分索引的时间。

C) 执行一个 insert/modify 查询,如果没有找到则插入,如果发现已经在索引中则更新时间戳,然后执行第二遍以删除任何具有较旧时间戳的项目。

D) 更好的东西。

在这种情况下,删除旧内容的合乎逻辑且有效的方法是什么?

如果我明白你想做什么,并且你确定每次抓取都包含完整的数据集,我会这样做:

  • 爬入基于时间的索引:you index-201504051656
  • 一口气:
    • 为新创建的索引创建一个别名
    • 从以前的索引中删除别名
  • 关闭旧索引或删除旧索引

这样您的应用程序就可以始终与别名对话,并且您确信您将始终有一个索引可以与之对话。从索引中删除大量记录相对繁重,关闭或删除索引相对便宜。