作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将日志保存到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?
最佳答案
完全可以使用ingest pipelines在索引过程之前运行。
以下内容将为您的特定用例提供解决方案,尽管有些麻烦:
PUT _ingest/pipeline/uuid_normalize
{
"description" : "Makes sure uuid is a hash map",
"processors" : [
{
"script": {
"source": """
if (ctx.uuid != null && !(ctx.uuid instanceof java.util.HashMap)) {
ctx.uuid = ['S': ctx.uuid]; // hash map init
}
"""
}
}
]
}
POST /index-000001/_doc
{
"uuid": {"S": "001"}
}
POST /index-000001/_doc?pipeline=uuid_normalize <------
{
"uuid": "001"
}
您现在可以将其扩展为任意通用的类型,但是假设您知道在每个文档中输入的期望。换句话说,与动态模板不同,您需要知道要保护的内容。关于elasticsearch - 如何让ES支持混合字段类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64118351/
我是一名优秀的程序员,十分优秀!