栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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"
}

查询结果:

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"
      }
    }
  ]
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/734370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号