带你读《Elastic Stack 实战手册》之80:——4.2.6.运用Elastic Stack分析COVID-19数据(3)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之80:——4.2.6.运用Elastic Stack分析COVID-19数据(3)

《Elastic Stack 实战手册》——四、应用实践——4.2 可观测性应用场景 ——4.2.6.运用Elastic Stack分析COVID-19数据(2) https://developer.aliyun.com/article/1225616



解析信息

 

在上面我们已经很成功地把我们的信息转换为我们所希望的数据类型。接下来我们来使用 grok来解析我们的数据。grok 的数据解析,基本上是一种正则解析的方法。我们首先使用Kibana所提供的 Grok Debugger 来帮助我们分析数据。我们将使用如下的 grok pattern 来解析我们的message:

 

%{NUMBER:lat:float},%{NUMBER:lon:float},'%{DATA:address}',%{DATA:city},',',%{DATA:country},%{NUMBER:infected:int},%{NUMBER:death:int}

image.png

我们点击 Grok Debugger,并把我们的相应的文档拷入到相应的输入框中,并用上面的 grok pattern 来解析数据。上面显示,它可以帮我们成功地解析我们想要的数据。显然这个被解析的信息更适合我们做数据的分析。为此,我们需要重新修改 pipeline:


PUT _ingest/pipeline/covid19_parser
{
  "processors": [
    {
      "remove": {
        "field": ["log", "input", "ecs", "host", "agent"],
        "if": "ctx.log != null && ctx.input != null && ctx.ecs != null && ctx.host != null && ctx.agent != null"
      }
    },
    {
      "gsub": {
        "field": "message",
        "pattern": "\"",
        "replacement": "'"
      }
    },
    {
     "grok": {
        "field": "message",
        "patterns": [
          "%{NUMBER:lat:float},%{NUMBER:lon:float},'%{DATA:address}',%{DATA:city},',',%{DATA:country},%{NUMBER:infected:int},%{NUMBER:death:int}"
          PUT _ingest/pipeline/covid19_parser
{
  "processors": [
    {
      "remove": {
        "field": ["log", "input", "ecs", "host", "agent"],
        "if": "ctx.log != null && ctx.input != null && ctx.ecs != null && ctx.host != null && ctx.agent != null"
      }
    },
    {
      "gsub": {
        "field": "message",
        "pattern": "\"",
        "replacement": "'"
      }
    },
    {
     "grok": {
        "field": "message",
        "patterns": [
          "%{NUMBER:lat:float},%{NUMBER:lon:float},'%{DATA:address}',%{DATA:city},',',%{DATA:country},%{NUMBER:infected:int},%{NUMBER:death:int}"
           ]
      }
    }        
  ]
}                  

 我们运行上面的 pipeline,并使用如下的命令来重新对数据进行分析:

POST covid19/_update_by_query?pipeline=covid19_parser

我们重新来查看文档:


image.png

在上面我们可以看到新增加的 country,infected,address 等等的字段。

 

添加location字段

 

在上面我们可以看到 lon 及 lat 字段。这些字段是文档的经纬度信息。这些信息并不能为我们所使用,因为首先他们是分散的,并不处于一个通过叫做 location 的字段中。为此,我们需要创建一个新的 location 字段。为此我们更新 pipeline 为:

 

PUT _ingest/pipeline/covid19_parser
{
  "processors": [
    {
      "remove": {
        "field": ["log", "input", "ecs", "host", "agent"],
          "if": "ctx.log != null && ctx.input != null && ctx.ecs != null && ctx.host != null && ctx.agent != null"
            }
    },
    {
      "gsub": {
        "field": "message",
        "pattern": "\"",
        "replacement": "'"
      }
    },
    {
     "grok": {
        "field": "message",
        "patterns": [
          "%{NUMBER:lat:float},%{NUMBER:lon:float},'%{DATA:address}',%{DATA:city},',',%{DATA:country},%{NUMBER:infected:int},%{NUMBER:death:int}"
        ]
      }
    },
    {
      "set": {
        "field": "location.lat",
        "value": "{{lat}}"
      }
    },
    {
      "set": {
        "field": "location.lon",
        "value": "{{lon}}"
      }
    }              
  ]
}


在上面我们设置了一个叫做 location.lat 及 location.lon 的两个字段。它们的值分别是 {{lat}}及 {{lon}}。我们执行上面的命令。

 

由于 location 是一个新增加的字段,在默认的情况下,它的两个字段都会被 Elasticsearch 设置为 text 的类型。为了能够让我们的数据在地图中进行显示,它必须是一个 geo_point 的数据类型。为此,我们必须通过如下命令来设置它的数据类型:

 

PUT covid19/_mapping
{
  "properties": {
    "location": {
      "type": "geo_point"
    }
  }
}

执行上面的指令,我们再使用如下的命令来对我们的数据重新进行处理:

POST covid19/_update_by_query?pipeline=covid19_parser


等执行完上面的命令后,我们重新来查看我们的文档:


image.png

从上面我们可以看到一个叫做 location 的新字段。它含有 lon 及 lat 两个字段。我们同时也可以查看 covid19 的 Mapping。

GET covid19/_mapping

我们可以发现 Location 的数据类型为:

 "location" : {
     "type" : "geo_point"
  }


它显示 location 的数据类型是对的。

 

到目前为止,我们已经成功地把数据导入到 Elasticsearch 中。我们接下来针对 covid19 来进行数据分析。


《Elastic Stack 实战手册》——四、应用实践——4.2 可观测性应用场景 ——4.2.6.运用Elastic Stack分析COVID-19数据(4) https://developer.aliyun.com/article/1225614

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
弹性计算 文件存储 索引
带你读《Elastic Stack 实战手册》之80:——4.2.6.运用Elastic Stack分析COVID-19数据(2)
带你读《Elastic Stack 实战手册》之80:——4.2.6.运用Elastic Stack分析COVID-19数据(2)
|
机器学习/深度学习 消息中间件 数据采集
带你读《Elastic Stack 实战手册》之5:——3.2.2.可观测性 (下)
带你读《Elastic Stack 实战手册》之5:——3.2.2.可观测性 (下)
182 0
|
Cloud Native
带你读《Elastic Stack 实战手册》之5:——3.2.2.可观测性 (上)
带你读《Elastic Stack 实战手册》之5:——3.2.2.可观测性 (上)
138 0
|
自然语言处理 索引
带你读《Elastic Stack 实战手册》之33:——3.4.2.17.2.Schemaless(上)
带你读《Elastic Stack 实战手册》之33:——3.4.2.17.2.Schemaless(上)
126 0
|
存储 运维 监控
带你读《Elastic Stack 实战手册》之2:——二、导读(下)
带你读《Elastic Stack 实战手册》之2:——二、导读(下)
278 0
|
SQL 自然语言处理 监控
带你读《Elastic Stack 实战手册》之2:——二、导读(上)
带你读《Elastic Stack 实战手册》之2:——二、导读(上)
352 0
|
JSON Java 数据格式
带你读《Elastic Stack 实战手册》之33:——3.4.2.17.2.Schemaless(下)
带你读《Elastic Stack 实战手册》之33:——3.4.2.17.2.Schemaless(下)
116 0
|
监控 数据可视化 安全
带你读《Elastic Stack 实战手册》之6:——3.3.1.Elastic Stack家族(5)
带你读《Elastic Stack 实战手册》之6:——3.3.1.Elastic Stack家族(5)
140 0
|
存储 Kubernetes 数据可视化
带你读《Elastic Stack 实战手册》之6:——3.3.1.Elastic Stack家族(4)
带你读《Elastic Stack 实战手册》之6:——3.3.1.Elastic Stack家族(4)
135 0
|
存储 JSON 安全
带你读《Elastic Stack 实战手册》之6:——3.3.1.Elastic Stack家族(1)
带你读《Elastic Stack 实战手册》之6:——3.3.1.Elastic Stack家族(1)
184 0