我有一个Oracle数据库。 Logstash从Oracle检索数据并将其放入ElasticSearch。
但是,当Logstash每5分钟进行计划的导出时,充满副本的ElasticSearch会导致旧数据仍然存在。这是一个明显的情况。在这5分钟内,Oracle的状况几乎没有改变。假设-添加了2-3行,而删除了4-5行。
我们如何用没有副本的新数据替换旧数据?
例如:
- 删除整个旧索引;
- 使用相同的名称创建新索引并进行相同的配置(nGram配置和映射);
- 添加所有新数据;
- 等待5分钟,然后重复。
答案 0 :(得分:2)
这很简单:为每个导入创建一个新索引并应用映射,然后将别名切换到最新索引。如果需要,请删除旧索引。您的currenr数据将在索引最新数据时始终可搜索。
以下是您可能需要阅读的资料来源:
在Elasticsearch中进行搜索时,使用别名(https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html)指向最新数据(顺便说一句,最好使用别名)。
使用过渡API(https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-rollover-index.html)为每次导入运行创建一个新索引-在此处也请注意别名处理。
使用索引模板(https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html)自动为新创建的索引应用映射/设置。
收缩,关闭和/或删除旧索引,以保持集群真正需要的数据处理。看看作为独立工具的策展人(https://github.com/elastic/curator)。
答案 1 :(得分:0)
您只需要使用每个文档的指纹/哈希值或每个文档中uniq字段的哈希值作为文档ID,以便在eveytime时可以在更新的位置覆盖相同的文档,同时添加新的文件。
但是这种方法不适用于从oracle删除数据。