Elasticsearch:使用 user agent 处理器来丰富数据
Posted Elastic 中国社区官方博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch:使用 user agent 处理器来丰富数据相关的知识,希望对你有一定的参考价值。
user_agent 处理器从浏览器随其 Web 请求发送的用户代理字符串中提取详细信息。 默认情况下,此处理器在 user_agent 字段下添加此信息。我们知道,发出 Web 请求的浏览器使用 user agent 字符串标识自己。在这个字符串中,这些用户代理字符串中有很多信息,比如使用的是什么浏览器,操作系统,版本等。但是很不幸的是,user agent 的字符串确实很难读:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/78.0.3904.70 Safari/537.36
如上所示,user agent 的信息不是那么容易理解的。
在 Elasticsearch 的 ingest node 中,我们可以通过部署一个 ingest pipeline,并使用 user_agent 处理器对它进行处理,那么我们可以得到更有有用的结构化信息。从这些信息中,我们甚至可以对访问的浏览器,操作系统等进行统计分析。比如,上面的 user agent 字符串,经过处理器,可以变为:
"user_agent" : {
"name" : "Chrome",
"original" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36",
"os" : {
"name" : "Mac OS X",
"version" : "10.14.6",
"full" : "Mac OS X 10.14.6"
},
"device" : {
"name" : "Other"
},
"version" : "78.0.3904"
}
显然上面的信息更利于我们对 user agent 的分析。
下面是一个基于 agent 字段将用户代理详细信息添加到 user_agent 字段的示例:
PUT _ingest/pipeline/user_agent
{
"description" : "Add user agent information",
"processors" : [
{
"user_agent" : {
"field" : "agent"
}
}
]
}
我们首先创建上面的 user_agent 这个 ingest pipeline。在导入数据时,我们可以使用如下的方法来使用 user_agent 这个处理器来对 user agent 字符串进行结构化:
PUT my-index-000001/_doc/my_id?pipeline=user_agent
{
"agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
}
那么我们可以通过如下的命令来查看被导入的数据:
GET my-index-000001/_doc/my_id
上面的命令显示:
{
"_index" : "my-index-000001",
"_type" : "_doc",
"_id" : "my_id",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
"user_agent" : {
"original" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
"os" : {
"name" : "Mac OS X",
"version" : "10.10.5",
"full" : "Mac OS X 10.10.5"
},
"name" : "Chrome",
"device" : {
"name" : "Mac"
},
"version" : "51.0.2704.103"
}
}
}
在上面,我们可以清楚地看到浏览器的名称:Chome,操作系统的信息,以及版本的信息。如果有时网路请求有问题的时候,我们可以通过这个来分析是否为某个浏览器的版本有问题,或者是操作系统的原因。当然我们甚至可以结合其它数据来统计不同浏览器的访问情况等等。
以上是关于Elasticsearch:使用 user agent 处理器来丰富数据的主要内容,如果未能解决你的问题,请参考以下文章
使用Elasticsearch中的copy_to来提高搜索效率
java操作 elasticsearch8.0 doc文档<二>