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

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
人工智能 前端开发 Java
计算机语言:人与计算机沟通的桥梁
计算机语言:人与计算机沟通的桥梁
293 1
|
前端开发
wangEditor - 轻量级web富文本编辑器(可带图片上传)
wangEditor - 轻量级web富文本编辑器(可带图片上传)
230 0
|
算法 程序员
游戏中的常见概率设计分析
游戏中的常见概率设计分析
|
算法
水下图像融合增强(Matlab代码实现)
水下图像融合增强(Matlab代码实现)
409 0
|
设计模式 缓存 开发框架
SpringMVC-----JSR303以及拦截器
SpringMVC-----JSR303以及拦截器
105 0
|
SQL Go
【golang】gorm 中的Where 子句踩坑(实际项目)
【golang】gorm 中的Where 子句踩坑(实际项目)
925 0
|
SQL XML Java
SpringBoot-18-Mybatis基础操作
SpringBoot-18-Mybatis基础操作
104 0
|
数据可视化 数据挖掘 API
5分钟掌握Pandas GroupBy
5分钟掌握Pandas GroupBy
267 0
5分钟掌握Pandas GroupBy
|
XML 前端开发 Java
卸载软件
卸载软件
142 0