首页 > 解决方案 > 如何让 ES 支持混合类型的字段?

问题描述

我正在将日志保存到 Elasticsearch 进行分析,但我发现特定字段的混合类型会在索引文档时导致错误。

例如,我可以将下面的日志保存到uuid对象所在的索引中。

POST /index-000001/_doc
{
  "uuid": {"S": "001"}
}

但从另一个事件来看,日志将是:

POST /index-000001/_doc
{
  "uuid": "001"
}

第二个 POST 将失败,因为类型uuid不是对象。所以我得到这个错误:object mapping for [uuid] tried to parse field [uuid] as object, but found a concrete value

我想知道最好的解决方案是什么?我无法更改日志,因为它们来自不同的应用程序。第一个日志来自 dynamodb 的数据,而第二个日志来自应用程序的数据。如何将这两种类型的日志保存到 ES 中?

如果我禁用动态映射,我将不得不指定索引映射中的所有字段。对于任何新领域,我无法搜索它们。所以我确实需要动态映射。

会有很多这样的情况。所以我正在寻找一个可以涵盖所有冲突领域的解决方案。

标签: elasticsearch

解决方案


你就是不能。您应该以某种方式规范化所有字段。或使用 2 个单独的字段。

我可以建议使用这样的字段:

"uuid": {"key": "S", "value": "001"}

并在不需要时跳过密钥。但是您必须在摄取之前预处理您的值。


推荐阅读