使用Elastic Stack对Google搜索历史进行可视化,回顾过去一年

这篇文章是2019年Elastic Stack(Elasticsearch)圣诞日历的第12天的文章。

由于我日常使用的手机是Android,浏览器是Chrome,所以我的Google账户中积累了各种数据。
这些数据都是可以下载的,因此我打算通过将Google搜索历史在Elasticsearch + Kibana中进行可视化,回顾过去一年的情况。

谷歌账户数据下载

image.png

在出现选择要下载的数据的屏幕上,适当地下载所需的数据。

弹性云的准备工作

接下来,我们将准备Elastic Cloud。
只需要注册电子邮箱,就可以享受为期14天的免费试用时间,非常感谢您的使用。

一旦注册完成,您将收到一封含有链接的电子邮件。您只需点击该链接,即可开始使用Elastic Cloud。

弹性堆栈的准备工作

image.png
image.png
image.png

如果RAM和其他设置都可以保持默认状态的话,只需要这样就可以了。很简单!

可定制的项目

可以按照现有的环境进行部署,但是通过点击「自定义部署」按钮,可以进行更详细的设置。
既然如此,我们来大致看一下可以进行哪些自定义设置。顺便说一下,这些选项在部署后也可以进行更改。

Elasticsearch 弹性搜索

image.png

机器学习

image.png

师傅专用节点

image.png

弹性搜索的插件

image.png

設定相关的索引关系

似乎可以设置以下两个选项。我认为这些地方在elasticsearch.yml中指定过,但是由于这些是比较常见的设置项目,所以可以通过复选框简单地进行设置,这很好。

    • 存在しないインデックスに対してドキュメントが追加されたときに自動的にインデックスを作成するか

 

    削除系の操作をする際にインデックス名を厳密に指定する必要があるか
image.png

Kibana 可视化工具。

image.png

APM (全称) 精确点击率管理系统。

image.png

设定完成后,就开始部署吧!按照这次的设定,等待大约2、3分钟,环境就能启动起来了。真是方便呢~!

向Elasticsearch添加数据

由于 Elastic Cloud 已经准备就绪,首先将下载的 Google 账户数据导入 Elasticsearch。
我们将使用 Kibana 的 Data Visualizer 功能来进行数据添加。
Data Visualizer 是一个功能强大的工具,只需上传 CSV 或 JSON 文件,它将自动创建数据类型判断和映射设置,并导入数据。

使用Kibana的机器学习>数据可视化器>导入数据功能上传文件。
这次要使用的Google帐号数据是JSON格式的,而JSON的格式需要按照要创建的文档单位进行换行分隔,所以我只是手动编辑了这一部分。(虽然只是使用正则表达式匹配和删除了空格和换行而已)

image.png
image.png

再次点击“导入”按钮,数据将会上传并自动创建索引。

数据整理

暫時將數據儲存下來,但原始數據並不適合進行可視化,所以需要對其進行整理。
我們使用 Logstash 作為 ETL 工具,通過 Elasticsearch -> Logstash -> Elasticsearch 的流程進行數據整理。
我們在本地部署並運行 Logstash,但安裝只參考了官方文件的最基本配置,具體的安裝步驟不再贅述。

管道设置

从Elasticsearch中的输入和输出可以使用Elasticsearch输入插件和Elasticsearch输出插件来实现。
正如所料,Logstash确实可以快速地与Elasticsearch进行集成。
使用Elasticsearch输入插件时,它还会自动使用Scroll API,这也是一个相对不起眼但令人开心的特点。
通过这个功能,我们可以轻松地调整每次请求中获取的文档数量。

好吧,至关重要的数据整理问题是,原始数据如下所示。

{
  "@timestamp" : "2019-11-20T09:12:02.734Z",
  "header" : "検索",
  "time" : "2019-11-20T09:12:02.734Z",
  "title" : "「 elasticsearch 勉強会 」を検索しました",
  "titleUrl" : "https://www.google.com/search?q=elasticsearch+%E5%8B%89%E5%BC%B7%E4%BC%9A",
  "products" : [ "検索" ],
  "locationInfos" : [ {} ]
}

根据搜索关键词title和日期time,在下面的流程中对这些数据进行整理,创建一个包含以空格分割的搜索关键词数组和仅包含搜索日期的数据。

    1. 将使用的字段限定为标题和时间。

 

    1. 删除标题中的“「」を検索しました”字符串。

 

    1. 将全角空格转换为半角空格。

 

    用半角空格分割标题。

我对Logstash的配置文件进行了以下类似的设置。

input {
  elasticsearch {
    hosts => ['ELASTICSEARCH_URL']
    index => 'raw-search-history'
    query => '{ "query": { "match_all": {} } }'
    size => 250
  }
}

filter {
  mutate {
    remove_field => [ "@timestamp", "header", "titleUrl", "products", "locationInfos" ]
  }

  mutate {
    gsub => [
      "title", "「 ", "",
      "title", " 」を検索しました", "",
      "title", " ", " "
    ]
  }

  mutate {
    split => { "title" => " " }
  }
}

output {
  elasticsearch {
    hosts => ['ELASTICSEARCH_URL']
    index => 'mutated-search-history''
  }
}

通过这个,可以制作出以下类似的文档。

{
  "title" : [
    "elasticsearch",
    "勉強会"
  ],
  "time" : "2019-11-20T09:12:02.734Z"
}

搜索历史的可视化

数据准备好了,现在开始使用Kibana来可视化搜索历史。
我们将利用Kibana的一个魅力之一,标签云来展示图形。

image.png

今年最常搜索的关键词是“go”。确实,从今年年初开始学习Go语言后,我觉得这是我最常查询的内容。除此之外,我还查了英语的意思,因为有世界杯,所以好像也经常查询了橄榄球。Elasticsearch、Logstash、Kibana以及甚至Elastic也都进入了排行榜。通过这样一看,我发现对这一年的回顾还比我想象的要充实。

总结

我们使用Elastic Stack来实现从数据投入到整形和可视化的所有过程。这些工具可以轻松协同工作是Elastic Stack的魅力所在!我们还使用Elastic Cloud来快速准备环境。Elastic Stack可以在多种情况下进行广泛应用,希望能在各种场景中发挥作用!

明天是@takashi1029先生!

广告
将在 10 秒后关闭
bannerAds