ElasticSearch Top Hits

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ElasticSearch Top Hits 使用ES聚合查询展示其他字段


今天要写一个需求,需要根据一个字段去做聚合,并且要展示其他索引内的字段。我们都知道如果是在mysql的话,单次查询也是无法被实现的,我们select的内容必须跟随在group的后面。但是为了保证ES的查询效率,我们需要在查询一次的情况下同时展示其他字段,那我们该怎么去做呢? 因为我们使用的表结构不是nested结构,并且这个表结构修改会涉及很多代码,所以我首先排除了通过innerHits去解决这个问题的方式,在这里我选用了Top Hits来解决眼下的这个问题,首先我们分析一下我们的场景,根据一个字段去聚合,并且获取出其他的字段,前提条件肯定是其他字段和当前聚合字段的关系必须是一对一的,并且我们得知道Top Hits它的作用是什么,作用是获取聚合后的其他字段或者可以理解为关联数据,而这个TopHits的size,为了性能考虑我们可以直接设置为1,也就是说比如你根据某一维度去进行聚合,你只需要在TopHits中新增其他你想要展示的字段即可,并且给它取个别名,在java代码中我们可以通过获取具体的别名来获取里面的值,这样我们就可以取到根据某个维度聚合之后的其他字段,这里你可能会有疑惑,为什么咱不像MySQL一样再次去查询一下而使用TopHits这种方式,因为咱ES的数据量很大,并且我们都知道ES的上限是1W条,假设你要遍历的数据不在这1W条之内呢,那你就肯定获取不到对应的值了,所以采用了TopHits的方式去进行取值。

在这里我们还需要考虑一下ES的版本,当初我们ES是升级成了6.8.4版本才可以使用,低于此版本的建议去参考一下官方文档看TopHits这个特性是哪个版本出的,并且当前业务是否兼容升级。在Nested的解决方式以及ES版本之间做一个取舍。

聚合DSL语句

{
"size": 1,
"aggregations": {
"eventName": {
"terms": {
"field": "eventname.keyword",
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
          {
"_count": "desc"          },
          {
"_key": "asc"          }
        ]
      },
"aggregations": {
"field": {
"top_hits": {
"from": 0,
"size": 1,
"version": false,
"seq_no_primary_term": false,
"explain": false,
"_source": {
"includes": [
"alert_level",
"alert_time",
"phase",
"mod"              ],
"excludes": []
            },
"sort": [
              {
"alert_time": {
"order": "asc"                }
              }
            ]
          }
        }
      }
    }
  }
}


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
数据建模
白话Elasticsearch55-数据建模之对每个用户发表的博客进行分组 (Top Hits Aggregation)
白话Elasticsearch55-数据建模之对每个用户发表的博客进行分组 (Top Hits Aggregation)
82 0
|
27天前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
92 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
3月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
3月前
|
Ubuntu Oracle Java
如何在 Ubuntu VPS 上安装 Elasticsearch
如何在 Ubuntu VPS 上安装 Elasticsearch
35 0
|
3月前
|
存储 Ubuntu Oracle
在Ubuntu 14.04上安装和配置Elasticsearch的方法
在Ubuntu 14.04上安装和配置Elasticsearch的方法
42 0
|
3月前
|
存储 安全 Java
在CentOS 7上安装和配置Elasticsearch的方法
在CentOS 7上安装和配置Elasticsearch的方法
210 0
|
3月前
|
自然语言处理 Docker 容器
ElasticSearch 实现分词全文检索 - ES、Kibana、IK分词器安装
ElasticSearch 实现分词全文检索 - ES、Kibana、IK分词器安装
46 0
|
3月前
|
Linux Docker 容器
Docker 安装 Elasticsearch、Kibana
Docker 安装 Elasticsearch、Kibana
41 0