当前位置: 首页 > 面试题库 >

如何通过Elasticsearch查询获取每个组的最新值?

吴才俊
2023-03-14
问题内容

我有一些在Elasticsearch上建立索引的文档,看起来像这些样本:

{'country': 'France', 'collected': '2015-03-12', 'value': 20}
{'country': 'Canada', 'collected': '2015-03-12', 'value': 21}
{'country': 'Brazil', 'collected': '2015-03-12', 'value': 33}
{'country': 'France', 'collected': '2015-02-01', 'value': 10}
{'country': 'Canada', 'collected': '2015-02-01', 'value': 11}
{'country': 'Mexico', 'collected': '2015-02-01', 'value': 9}
...

我想建立一个查询,每个国家/地区只能得到一个结果,而只能得到max(collected)

因此,对于上面显示的示例,结果将类似于:

{'country': 'France', 'collected': '2015-03-12', 'value': 20}
{'country': 'Canada', 'collected': '2015-03-12', 'value': 21}
{'country': 'Brazil', 'collected': '2015-03-12', 'value': 33}
{'country': 'Mexico', 'collected': '2015-02-01', 'value': 9}

我意识到我需要进行汇总country,但是我无法理解如何限制的结果max(collected)

有任何想法吗?


问题答案:

您可以使用top_hitscountry字段分组的聚合,每组返回1个文档,并按收集日期降序排列文档:

POST /test/_search?search_type=count
{
    "aggs": {
        "group": {
            "terms": {
                "field": "country"
            },
            "aggs": {
                "group_docs": {
                    "top_hits": {
                        "size": 1,
                        "sort": [
                            {
                                "collected": {
                                    "order": "desc"
                                }
                            }
                        ]
                    }
                }
            }
        }
    }
}


 类似资料:
  • 问题内容: 我正在使用 Elasticsearch 2.3 和 官方php驱动程序 。该 updateByQuery 是给我的烦恼在PHP中使用。对于如何使用它的一些帮助将不胜感激。 基本上我想更新几个与某个查询匹配的 文档 字段(名称,价格) 谢谢。 问题答案: 因此,借助CURL api的工作原理,我设法提出了一种方法。 首先,您需要编辑您的脚本以允许脚本。最后添加以下几行。 之后,您可以开始

  • 问题内容: 我有这张表 language_id是指记录所用的语言。我想做的是检索 每个language_id中 最近的五个记录(ORDER BY time_posted DESC LIMIT 5)的列表。我可以使用许多不同的SQL查询在PHP中循环执行此操作,但我觉得有一种更简单的方法。 我必须得到一本有关SQL的书,哈哈。 谢谢。 问题答案: 这是我在MySQL中解决此“每组前N个”类型的查询的

  • 我想更新索引中的所有文档。我发现更新查询是我们应该使用的方法。但是,当我使用ctx._now作为更新文档字段的值时,我遇到了问题,导致字段值变为NULL。 这是示例: 当我使用随机数值时,它是工作。假设我把timenow=5。然后,All documents字段timenow变为5。但是,使用这种ctx方法是行不通的。 我该怎么做呢? 附加信息 示例:POST INDEX/TYPE/24/_UPD

  • 问题内容: 我在Mysql中使用Django 1.6。 我有以下模型: 我想获取每个学生的最新分数记录。 我试过了: 和: 问题答案: 这应该适用于Django 1.2+和MySQL:

  • 问题内容: 不幸的是,SQL并不是很容易找到我。我有两个表,一个表和一个表。 贷款支付表: ID(主键),LoanID(与贷款表上的ID匹配),PaymentDate,Amount等。 我需要一条sql语句,该语句可以给我每个月输入的最后一笔付款(如果有的话)。我目前的说法没有给我结果。还存在一个问题,有时在该月的最大日期有时会有平局,因此我也必须能够处理该问题(我的想法是在平局的情况下选择最大的

  • 问题内容: 我正在尝试在Elasticsearch上运行看起来像一个简单查询的内容,但似乎无法获得想要的结果。 这是我要做的简短示例: 我有一个新闻数据库。每条新闻都包含一个来源,一个标题,一个时间戳和一个用户。 我想要获得给定用户的每个可用来源的最新标题(基于时间戳)。 那么,例如,如何从约翰那里获得最后的CNN和最后的ESPN头条新闻? 我一直在研究多重搜索API,但这意味着我需要事先了解所有