如何在 OpenSearch 中对结果进行分组?

问题描述 投票:0回答:1

作为OpenSearch的新人,为了自己的业务需求正在摸索。具体来说,我正在寻找一个搜索引擎,它可以根据字段(例如国家属性,以及基于哪个国家/地区的分组)对搜索结果进行分组。

我注意到 Elastic Search 通过折叠(参考 1)或聚合(参考 2)支持此功能。因此,我有兴趣了解 OpenSearch 是否提供类似的功能。如果您还可以举一个实现此结果的查询示例,那就太好了。谢谢。

参考 1:https://www.elastic.co/guide/en/elasticsearch/reference/current/collapse-search-results.html 参考 2:如何使用 Elasticsearch 查询获取每个组的最新值?

奖金问题:对于每个分组,显示的最大结果数是多少?有没有办法显示无限的结果?

elasticsearch search opensearch
1个回答
0
投票

您看过 OpenSearch 中的Bucket aggregations了吗?

例如,您可以使用

terms
聚合根据特定字段(例如“国家/地区”)对搜索结果进行分组。这是一个基本的示例查询(您可以自定义以满足您的特定需求):

GET index_name/_search
{
  "size": 0,
  "aggs": {
    "group_by_country": {
      "terms": {
        "field": "country",
        "size": 10
      }
    }
  }
}

“大小”参数设置为 0,这意味着我们不想检索任何命中,只检索聚合结果。

此查询的结果将是一个桶列表,每个桶对应“国家”字段的每个唯一值,以及每个桶中的文档数。

terms
聚合中的“大小”参数设置为10,这意味着将根据每个桶中的文档数量返回前10个桶。

来自文档:“默认情况下,OpenSearch 不会生成超过 10,000 个桶。您可以使用大小属性更改此行为,但请记住,对于包含数千个桶的非常宽的查询,性能可能会受到影响。”

因此,您可以将

terms
聚合中的“大小”参数调整为适合您需要的任何值,具体取决于“国家”字段中唯一值的数量以及您要显示的桶数。请记住,较大的值可能会影响性能并增加查询的响应时间。

© www.soinside.com 2019 - 2024. All rights reserved.