gpt4 book ai didi

elasticsearch - 如何让ES支持混合字段类型?

转载 作者:行者123 更新时间:2023-12-03 02:13:25 26 4
gpt4 key购买 nike

我将日志保存到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?
如果禁用动态映射,则必须在索引映射中指定所有字段。对于任何新字段,我都无法搜索。所以我确实需要动态映射。
会有很多这样的情况。因此,我正在寻找一种可以涵盖所有冲突 Realm 的解决方案。

最佳答案

完全可以使用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"
    }
    您现在可以将其扩展为任意通用的类型,但是假设您知道在每个文档中输入的期望。换句话说,与动态模板不同,您需要知道要保护的内容。
    您可以阅读有关无痛脚本操作符here的更多信息。

  • 关于elasticsearch - 如何让ES支持混合字段类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64118351/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com