如何使Logstash替换旧数据?

时间:2018-11-28 18:00:41

标签: elasticsearch logstash n-gram

我有一个Oracle数据库。 Logstash从Oracle检索数据并将其放入ElasticSearch。


但是,当Logstash每5分钟进行计划的导出时,充满副本的ElasticSearch会导致旧数据仍然存在。这是一个明显的情况。在这5分钟内,Oracle的状况几乎没有改变。假设-添加了2-3行,而删除了4-5行。

我们如何用没有副本的新数据替换旧数据?


例如:

  
      
  1. 删除整个旧索引;
  2.   
  3. 使用相同的名称创建新索引并进行相同的配置(nGram配置和映射);
  4.   
  5. 添加所有新数据;
  6.   
  7. 等待5分钟,然后重复。
  8.   

2 个答案:

答案 0 :(得分:2)

这很简单:为每个导入创建一个新索引并应用映射,然后将别名切换到最新索引。如果需要,请删除旧索引。您的currenr数据将在索引最新数据时始终可搜索。

以下是您可能需要阅读的资料来源:

  1. 在Elasticsearch中进行搜索时,使用别名(https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html)指向最新数据(顺便说一句,最好使用别名)。

  2. 使用过渡API(https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-rollover-index.html)为每次导入运行创建一个新索引-在此处也请注意别名处理。

  3. 使用索引模板(https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html)自动为新创建的索引应用映射/设置。

  4. 收缩,关闭和/或删除旧索引,以保持集群真正需要的数据处理。看看作为独立工具的策展人(https://github.com/elastic/curator)。

答案 1 :(得分:0)

您只需要使用每个文档的指纹/哈希值或每个文档中uniq字段的哈希值作为文档ID,以便在eveytime时可以在更新的位置覆盖相同的文档,同时添加新的文件。

但是这种方法不适用于从oracle删除数据。