您现在的位置是:首页 > 文章详情

在 Elasticsearch 中解析 JSON 字段

日期:2025-10-27点击:2

作者:来自ElasticValentin Crettaz

 

了解如何使用摄取管道解析 Elasticsearch 中的 JSON 字段,以有效地索引、查询和聚合 JSON 数据。

Elasticsearch 新手?加入我们的 Elasticsearch 入门网络研讨会。您还可以开始免费的云试用或立即在您的机器上试用 Elastic。


在本文中,我们将讨论如何在 Elasticsearch 中解析 JSON 字段,这是处理日志数据或其他结构化数据格式时的常见需求。我们将涵盖以下主题:

  • 将 JSON 数据导入 Elasticsearch
  • 使用 Ingest Pipeline 解析 JSON 字段
  • 查询和聚合 JSON 字段

1. 将 JSON 数据导入 Elasticsearch

在将 JSON 数据导入 Elasticsearch 时,确保数据格式和结构正确非常重要。Elasticsearch 可以自动检测并映射 JSON 字段,但建议定义显式映射,以更好地控制索引过程。

要创建带有自定义映射的索引,可以使用以下 API 调用:

PUT /my_index
{
 "mappings": {
   "properties": {
     "message": {
       "type": "keyword"
     },
     "json_field": {
       "properties": {
         "field1": {
           "type": "keyword"
         },
         "field2": {
           "type": "integer"
         }
       }
     }
   }
 }
}

在这个示例中,我们创建了一个名为 my_index 的索引,并为一个名为 json_field 的 JSON 字段定义了自定义映射。

2. 使用 Ingest Pipeline 解析 JSON 字段

如果你的 JSON 数据以字符串形式存储在某个字段中,可以使用 Elasticsearch 的 Ingest Pipeline 功能来解析该 JSON 字符串并提取相关字段。Ingest Pipeline 提供了一组内置处理器,其中包括 json 处理器,可用于解析 JSON 数据。

要创建一个包含 json 处理器的 ingest pipeline,请使用以下 API 调用:

PUT _ingest/pipeline/json_parser
{
 "description": "Parse JSON field",
 "processors": [
   {
     "json": {
       "field": "message",
       "target_field": "json_field"
     }
   }
 ]
}

在这个示例中,我们创建了一个名为 json_parser 的 ingest pipeline,它会解析存储在 message 字段中的 JSON 字符串,并将解析后的 JSON 对象存储到一个名为 json_field 的新字段中。

要使用此 pipeline 索引文档,请使用以下 API 调用:

POST /my_index/_doc?pipeline=json_parser
{
 "message": "{\"field1\": \"value1\", \"field2\": 42}"
}

该文档将以解析后的 JSON 字段形式被索引:

{
 "_index": "my_index",
 "_type": "_doc",
 "_id": "1",
 "_source": {
   "message": "{\"field1\": \"value1\", \"field2\": 42}",
   "json_field": {
     "field1": "value1",
     "field2": 42
   }
 }
}

3. 查询和聚合 JSON 字段

一旦 JSON 字段被索引,就可以使用 Elasticsearch Query DSL 对其进行查询和聚合。例如,要搜索在 field1 子字段中具有特定值的文档,可以使用以下查询:

POST /my_index/_search
{
 "query": {
       "term": {
         "json_field.field1": "value1"
       }
 }
}

额外提示:如何处理未解析的 JSON 数据?

如果你已经将未解析的 JSON 数据导入到 text/keyword 字段中,不必从头重新索引,也有办法提取其中的 JSON 数据。

你可以利用第 2 节中创建的 ingest pipeline,结合Update by Query API来完成这一操作。但在执行更新之前,需要像第 1 节中那样更新索引映射,为 json_field 添加映射,可以通过运行以下命令实现:

PUT /my_index/_mapping
{
  "properties": {
    "json_field": {
      "properties": {
        "field1": {
          "type": "keyword"
        },
        "field2": {
          "type": "integer"
        }
      }
    }
  }
}

完成后,你可以直接运行以下命令,它会遍历索引中的所有文档,从 message 字段中提取 JSON,并将解析后的 JSON 数据索引到 json_field 对象中。

POST /my_index/_update_by_query?pipeline=json_parser

结论

总之,在 Elasticsearch 中解析 JSON 字段可以通过自定义映射、Ingest Pipeline 功能以及 Elasticsearch Query DSL 来实现。通过遵循这些步骤,你可以在 Elasticsearch 集群中高效地索引、查询和聚合 JSON 数据。

 

原文:https://www.elastic.co/search-labs/blog/elasticsearch-parse-json-field-ingest-pipeline

原文链接:https://my.oschina.net/u/3343882/blog/18697269
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章