elasticsearch - 如何让 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 中?
如果我禁用动态映射,我将不得不指定索引映射中的所有字段。对于任何新领域,我无法搜索它们。所以我确实需要动态映射。
会有很多这样的情况。所以我正在寻找一个可以涵盖所有冲突领域的解决方案。
解决方案
你就是不能。您应该以某种方式规范化所有字段。或使用 2 个单独的字段。
我可以建议使用这样的字段:
"uuid": {"key": "S", "value": "001"}
并在不需要时跳过密钥。但是您必须在摄取之前预处理您的值。
推荐阅读
- c# - P/Invoke 和 .NET 目标框架
- azure - 通过 terraform 部署时 LUN 编号未排序
- html - 并排 div 元素与音频项的浮动
- database - 如何将简码输出保存到数据库中?
- react-native - 来自响应服务器的布尔值在表 ant 中不可见
- c++ - 为什么这不会在 WSL 中的 Ubuntu 上触发堆栈溢出?
- c - 为什么 fpclassify() 宏定义在 math.h 而不是 float.h?
- git - git add 和 git commit 之后的 3 个文件是什么?
- java - 如何在 microsoft azure 中授予客户端应用程序对请求范围的访问权限
- c# - C# LINQ 值替换