如何在Elasticsearch中将自定义元数据与索引关联



因此,我们有一个MySQL存储,它是我们数据的持久层。对于一些搜索用例,我们想要做的是通过查询MySQL存储中的数据,根据需要创建Elasticsearch索引。我们还配置了一个ILM策略,可以在创建一周后删除这些索引。实际上,这些索引是短暂的,只要有搜索请求进来,就会按需创建,然后删除。

因为我只需要将一组固定的数据摄入Elasticsearch索引,所以我想定义该索引的状态,以指示摄入过程的完整性。这是必要的,因为直到所有数据都在那里,用户才真正被允许执行搜索——直到索引完全加载了所有所需的数据。

所以,我想要的是将这种状态关联为索引的某种元数据。因为我们的ILM策略规定这些索引是短暂的,所以我不想使用外部系统来管理它们的状态。通常,在创建索引并开始摄取时,我必须在挂起状态、构建状态和已完成/失败状态之间导航。

看起来_meta映射是我可以用于此目的的东西,但我不完全确定这是正确的方法。

有没有其他可能显而易见的方法可以做到这一点?或者可能是一种更好的方法来彻底解决这个问题?

在映射中使用元字段应该可以工作,并且通常被多个框架使用。但这取决于需要存储的数据/信息的数量和结构,以及您希望使用这些数据的方式。

如果元数据的数量需要更大或更复杂,请考虑创建一个元索引,存储有关索引状态的简单文档。它还将更高效,因为索引更改(如映射更新(需要在集群中广播。有了这样的专用元数据索引,将简化许多其他任务,如查询所有有资格删除的索引等。使用_meta,您将无法实现版本控制或历史支持等功能。使用所提出的元索引,您可以为每个托管索引存储一个文档,或者如果您想要某种历史记录,可以为每个索引和状态更改存储一个。

BTW:Elasticstack组件创建了很多带点前缀的标记,比如.kibana或.logstash;原因是这些组件需要存储某种状态。

从我的角度来看,这是一个更通用的解决方案,值得一试。

编辑总结评论

由于元数据更新不频繁,而且在ILM删除索引后需要删除相关的元数据文档,因此_meta存储方法应该是最受欢迎的方法。

最新更新