Elasticsearch:top_hits aggregation
top_hits指标聚合器跟踪要聚合的最相关文档。 该聚合器旨在用作子聚合器,以便可以按存储分区汇总最匹配的文档。
top_hits聚合器可以有效地用于通过存储桶聚合器按某些字段对结果集进行分组。 一个或多个存储桶聚合器确定将结果集切成哪些属性。
选项:
- from-要获取的第一个结果的偏移量。
- size-每个存储桶要返回的最匹配匹配项的最大数目。 默认情况下,返回前三个匹配项。
- 排序-匹配的热门匹配的排序方式。 默认情况下,命中按主要查询的分数排序。
我们还是来用一个例子来展示如何使用这个:
准备数据:
我们选用Kibana里带的官方的Sample web logs来作为我们的索引:
然后加载我们的索引:
这样我们的数据就加载完成了。
Top hits aggregation
首先,我们先做一个简单的基于hosts的aggregation:
GET kibana_sample_data_logs/_search
{
"size": 0,
"aggs": {
"hosts": {
"terms": {
"field": "host.keyword",
"size": 2
}
}
}
}
上面的搜索的结果是我们想得到2个桶的数据(这里为了说明问题的方便,设定为2)。而这两个桶是基于hosts的值。搜索的结果是:
"aggregations" : {
"hosts" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 2807,
"buckets" : [
{
"key" : "artifacts.elastic.co",
"doc_count" : 6488
},
{
"key" : "www.elastic.co",
"doc_count" : 4779
}
]
}
}
现在的要求是:我们想针对这里的每个桶得到按照我们需要排序的前面的几个结果,比如下面的搜索:
GET kibana_sample_data_logs/_search
{
"size": 0,
"aggs": {
"hosts": {
"terms": {
"field": "host.keyword",
"size": 2
},
"aggs": {
"most_bytes": {
"top_hits": {
"sort": [
{
"bytes": {
"order": "desc"
}
}
],
"_source": {
"includes": [
"bytes",
"hosts",
"ip",
"clientip"
]
},
"size": 2
}
}
}
}
}
}
上面实际上市一个pipleline的聚合。它在针对上面的桶来做了一个top_hits的聚合。针对每个桶,我们需要安装bytes的大小,降序排列,并且每个桶只需要两个数据:
"aggregations" : {
"hosts" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 2807,
"buckets" : [
{
"key" : "artifacts.elastic.co",
"doc_count" : 6488,
"most_bytes" : {
"hits" : {
"total" : {
"value" : 6488,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "kibana_sample_data_logs",
"_type" : "_doc",
"_id" : "dnNIHm8BjrINWI3xXlRc",
"_score" : null,
"_source" : {
"bytes" : 19929,
"ip" : "127.155.255.9",
"clientip" : "127.155.255.9"
},
"sort" : [
19929
]
},
{
"_index" : "kibana_sample_data_logs",
"_type" : "_doc",
"_id" : "OXNIHm8BjrINWI3xX1td",
"_score" : null,
"_source" : {
"bytes" : 19904,
"ip" : "100.177.58.231",
"clientip" : "100.177.58.231"
},
"sort" : [
19904
]
}
]
}
}
},
{
"key" : "www.elastic.co",
"doc_count" : 4779,
"most_bytes" : {
"hits" : {
"total" : {
"value" : 4779,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "kibana_sample_data_logs",
"_type" : "_doc",
"_id" : "4nNIHm8BjrINWI3xYWQl",
"_score" : null,
"_source" : {
"bytes" : 19986,
"ip" : "233.204.30.48",
"clientip" : "233.204.30.48"
},
"sort" : [
19986
]
},
{
"_index" : "kibana_sample_data_logs",
"_type" : "_doc",
"_id" : "wnNIHm8BjrINWI3xW0Rj",
"_score" : null,
"_source" : {
"bytes" : 19956,
"ip" : "129.237.102.30",
"clientip" : "129.237.102.30"
},
"sort" : [
19956
]
}
]
}
}
}
]
}
}
从上面的返回结果可以看出来两个hosts artifacts.elastic.co及www.elastic.co各返回两个结果,并且它们是按照bytes的大小进行降序排列的。
细心的读者可能会发现这个和我之前介绍的field collapsing有些类似。只是field collapsing里针对每个桶有一个结果,并且是按照我们的要求进行排序的最高结果的那个。当然我们也可以含有多几个返回结果在inner_hits之中。
Elasticsearch:top_hits aggregation的更多相关文章
- Elasticsearch:运用search_after来进行深度分页
在上一篇文章 "Elasticsearch:运用scroll接口对大量数据实现更好的分页",我们讲述了如何运用scroll接口来对大量数据来进行有效地分页.在那篇文章中,我们讲述了 ...
- Elasticsearch:Index生命周期管理入门
如果您要处理时间序列数据,则不想将所有内容连续转储到单个索引中. 取而代之的是,您可以定期将数据滚动到新索引,以防止数据过大而又缓慢又昂贵. 随着索引的老化和查询频率的降低,您可能会将其转移到价格较低 ...
- Elasticsearch:Pinyin 分词器
Elastic的Medcl提供了一种搜索Pinyin搜索的方法.拼音搜索在很多的应用场景中都有被用到.比如在百度搜索中,我们使用拼音就可以出现汉字: 对于我们中国人来说,拼音搜索也是非常直接的.那么在 ...
- Elasticsearch:定制分词器(analyzer)及相关性
转载自:https://elasticstack.blog.csdn.net/article/details/114278163 在许多的情况下,我们使用现有的分词器已经足够满足我们许多的业务需求,但 ...
- Elasticsearch:如何实现对 emoji 表情符号进行搜索
转摘自:https://elasticstack.blog.csdn.net/article/details/114261636 Elasticsearch 是一个应用非常广泛的搜索引擎.它可以对文字 ...
- Elasticsearch:使用 GeoIP 丰富来自内部专用 IP 地址
转载自:https://blog.csdn.net/UbuntuTouch/article/details/108614271 对于公共 IP,可以创建表来指定 IP 属于哪个城市的特定范围.但是,互 ...
- Elasticsearch:aggregation介绍
聚合(aggregation)功能集是整个Elasticsearch产品中最令人兴奋和有益的功能之一,主要是因为它提供了一个非常有吸引力对之前的facets的替代. 在本教程中,我们将解释Elasti ...
- Elasticsearch:significant terms aggregation
在本文中,我们将重点关注significant terms和significant text聚合.这些聚合旨在搜索数据集中有趣和/或不寻常的术语,这些术语可以告诉您有关数据的隐藏属性的更多信息.此功能 ...
- Elasticsearch:运用 shard_size 来提高term aggregation的精度
随机推荐
- 从入门到爱上Git
时间不在于你拥有多少,而在于你怎样使用------时之沙 · 艾克 一.Git设置 1.1 Git全局设置 当我们安装好Git以后,我们需要对Git进行账号.邮箱的设置 设置用户信息 git conf ...
- 论文阅读 TEMPORAL GRAPH NETWORKS FOR DEEP LEARNING ON DYNAMIC GRAPHS
14 TEMPORAL GRAPH NETWORKS FOR DEEP LEARNING ON DYNAMIC GRAPHS link:https://scholar.google.com.hk/sc ...
- 好串_via牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28537/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...
- 高级数据结构学习笔记 / Data Structure(updating)
树状数组 查询操作:O(logn) 修改操作:O(logn) #define lowbit(x) (x & -x) int tr[N]; // 树状数组 // 添加c个大小为x的数值 vo ...
- Odoo14 OWL 如何访问model方法和res_id
首先OWL是Odoo14版本新加的功能. 因为是新加的所以并没有太多的说明文档,包括英文板文档也没有:所以你要用它再没有更详细的文档之前你得自己去看源码. 注意owl是没有do_action函数给你跳 ...
- C#爬虫之通过Selenium获取浏览器请求响应结果
前言 在进行某些爬虫任务的时候,我们经常会遇到仅用Http协议难以攻破的情况,比如协议中带有加密参数,破解需要花费大量时间,那这时候就会用Selenium去模拟浏览器进行页面上的元素抓取 大多数情况下 ...
- [GYCTF2020]Ezsqli-1|SQL注入
1.打开界面之后在输入框进行输入测试,分别输入1.2.3.'等字符,结果如下: 2.看到bool(false)这里我想到了bool注入,因为之前做过这道题:https://www.cnblogs.co ...
- beego下让swagger按照更新了controllers的接口信息自动更新commentsRouter_controllers.go
beego下让swagger按照更新了controllers的接口信息自动更新commentsRouter_controllers.go (1)在beego环境中,当更新了controllers目录下 ...
- 大数据管理系统架构Hadoop
Hadoop 起源于Google Lab开发的Google File System (GFS)存储系统和MapReduce数据处理框架.2008年,Hadoop成了Apache上的顶级项目,发展到今天 ...
- Git 08 IDEA撤销添加
参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 如果将不想添 ...