如何让elasticsearch映射base64字段?

Zha*_* Yi 3 elasticsearch

我有一个 json 文件作为 Elasticsearch 7.10.1 集群的输入。json 的格式类似于:

{
              "data" : "eyJtZXRyaWNfc3RyZWFtX25hbWUiOiJtGltZW5zaW9ucy...
}
Run Code Online (Sandbox Code Playgroud)

json中的数据值是json的base64。如何在elasticsearch中创建一个映射来解码base64值并在解码的json内的每个字段上创建索引?

Val*_*Val 5

摄取管道来救援!您可以创建一个摄取管道,该管道将解码 Base64 编码字段,然后解析生成的 JSON 并将所有字段添加到文档中。它基本上是这样的:

PUT _ingest/pipeline/b64-decode
{
  "processors": [
    {
      "script": {
        "source": "ctx.decoded = ctx.b64.decodeBase64();"
      }
    },
    {
      "json": {
        "field": "decoded",
        "add_to_root": true
      }
    },
    {
      "remove": {
        "field": "decoded"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后您可以在索引新文档时引用该摄取管道,如下所示:

PUT index/_doc/1?pipeline=b64-decode
{
   "b64": "eyJmaWVsZCI6ICJoZWxsbyB3b3JsZCJ9"
}
Run Code Online (Sandbox Code Playgroud)

b64字段包含以下 base64 编码的 JSON

{ "field" : "hello world" }
Run Code Online (Sandbox Code Playgroud)

最后,将被索引的文档将如下所示:

{
   "b64" : "eyJmaWVsZCI6ICJoZWxsbyB3b3JsZCJ9",
   "field" : "hello world"
}
Run Code Online (Sandbox Code Playgroud)