sql - Elasticsearch 分组并获取第一条记录

标签 sql elasticsearch group-by elasticsearch-5

我是 Elastic Search 新手, 我想在 Elasticsearch 中创建一个查询,其工作方式类似于 SQL 分组。 这是我的 SQL 查询

SELECT top 100  *
FROM (
SELECT ROW_NUMBER()
OVER(PARTITION BY columnA
ORDER BY columnB) AS StRank, *
FROM table where columnA in ('a','b','c') ) n
WHERE StRank IN (1) 
GO

我想要一个按columnA分组并按columnB排序的单行

最佳答案

您可以使用collapse .

Allows to collapse search results based on field values. The collapsing is done by selecting only the top sorted document per collapse key

{
  "query": {
    "bool": {
      "filter": {- -> filter doesn't calculate score(if score needed use must)
        "terms": {
          "columnA": ["a","b","c"]
        }
      }
    }
  },
  "collapse": {      --> top 1 Group by column A
    "field": "columnA"
  },
  "sort": [          --> sort 
    {
      "columnB": {
        "order": "desc"
      }
    }
  ]
}

关于sql - Elasticsearch 分组并获取第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60926783/

相关文章:

sql - 防止某些行在 Oracle 中被删除

Elasticsearch - 查找缺少两个字段的文档

ruby-on-rails - 如何对这个哈希数组进行分组?

mysql - 使用 MIN 获取 GROUP BY 的相应行值

mysql - 使用其他列中的值在 mySQL 中创建新列

mysql - 查找 MySql 特定的键约束

MySQL 查询和数据透视表

elasticsearch - elasticsearch嵌套范围过滤器脚本

lucene - “boost”对文档和查询意味着什么?

sql-server - SQL Server Over Partition By 和 Group By 性能比较