ES中如何查询Top10数据

简介: ES中如何查询Top10数据

问题描述:


在实际项目中,查询Top10数据的场景非常常见,比如查询票房前十的电影,销售榜前十的商品等。

那么在ES中如何查询Top10的数据呢?


问题分析:


一般Top10问题,都可以转化成先排序再取排行前10的问题,那么实现就简单了。


数据准备


创建索引book,获取价格最贵的3本书的信息。

PUT book
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text", "analyzer": "ik_smart"
      },
      "price": {
        "type": "double"
      }
    }
  }
}


PUT /book/_bulk
{ "create": { } }
{"name": "java编程思想","price": 100}
{ "create": { } }
{"name": "ES实战","price": 120}
{ "create": { } }
{"name": "ES从入门到精通","price": 60}
{ "create": { } }
{"name": "微服务架构 设计模式","price": 160}
{ "create": { } }
{"name": "架构真经","price": 90}
{ "create": { } }
{"name": "spring boot实战","price": 50}
{ "create": { } }
{"name": "高性能mysql","price": 80}


实现方案:


1、SQL查询

POST /_sql?format=txt
{
  "query": "SELECT * FROM book ORDER BY price DESC",
  "fetch_size": 3
}
POST /_sql?format=txt
{
  "query": "SELECT * FROM (SELECT * FROM book ORDER BY price DESC ) limit 3"
}


查询结果:

44.png


2、DSL查询

POST /_sql/translate
{
  "query": "SELECT * FROM book ORDER BY price DESC",
  "fetch_size": 3
}

转化结果:

{
  "size" : 3,
  "_source" : {
    "includes" : [
      "name",
      "price"
    ],
    "excludes" : [ ]
  },
  "sort" : [
    {
      "price" : {
        "order" : "desc",
        "missing" : "_first",
        "unmapped_type" : "double"
      }
    }
  ]
}

完整DSL语句:

POST /book/_search
{
  "size" : 3,
  "_source" : {
    "includes" : [
      "name",
      "price"
    ],
    "excludes" : [ ]
  },
  "sort" : [
    {
      "price" : {
        "order" : "desc",
        "missing" : "_first",
        "unmapped_type" : "double"
      }
    }
  ]
}
目录
相关文章
|
Ubuntu 网络安全 Docker
Ubuntu 安装与配置ssh (docker)
Ubuntu 安装与配置ssh (docker)
480 0
|
6月前
|
人工智能 自然语言处理 语音技术
Soul App联合西工大和上交大开源语音合成模型SoulX-Podcast,已登顶Hugging Face TTS趋势榜!
Soul AI Lab联合西工大、上交大开源SoulX-Podcast,支持中英粤川等多语种方言及副语言生成,可稳定输出超60分钟自然流畅的多人对话音频,已在Huggingface登顶TTS趋势榜。
890 0
Soul App联合西工大和上交大开源语音合成模型SoulX-Podcast,已登顶Hugging Face TTS趋势榜!
|
10月前
|
存储 缓存 自然语言处理
Elasticsearch 查询性能优化:从 3 秒到 300ms 的 6 个核心参数调优指南
本文分享某电商平台 Elasticsearch 性能调优实战,通过调整分片数、刷新间隔、缓存配置等 6 个核心参数,将商品搜索从 3 秒优化至 300 毫秒,显著提升查询性能与系统吞吐量。内容涵盖性能诊断、参数调优逻辑、实操方案及避坑指南,助力高频查询场景下的 ES 优化。
|
5月前
|
人工智能 NoSQL 数据库
DBeaver 25.3 发布 - 通用数据库工具
DBeaver Ultimate Edtion 25.3 Multilingual (macOS, Linux, Windows) - 通用数据库工具
604 0
DBeaver 25.3 发布 - 通用数据库工具
|
传感器 运维 监控
|
Unix Linux Shell
export在linux中的作用
通过对 `export`命令的详细介绍和实际应用示例,可以更好地理解和使用这一命令来管理Linux环境中的变量配置,从而提高系统管理和脚本编写的效率和灵活性。
1092 27
|
存储 Kubernetes 调度
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
633 6
|
自然语言处理 安全 Java
Spring Boot中集成Lucence
本节课首先详细的分析了全文检索的理论规则,然后结合 Lucene,系统的讲述了在 Spring Boot 的集成步骤,首先快速带领大家从直观上感受 Lucene 如何建立索引已经如果检索,其次通过中文检索的具体实例,展示了 Lucene 在全文检索中的广泛应用。Lucene 不难,主要就是步骤比较多,代码不用死记硬背,拿到项目中根据实际情况做对应的修改即可。
|
数据采集
正则表达式匹配html标签,获取标签内容
正则表达式匹配html标签,获取标签内容