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

11dmarpk  于 2023-04-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(234)

作为OpenSearch的新手,我正在探索它以满足我的业务需求。具体来说,我正在搜索一个搜索引擎,它可以根据搜索结果的字段(eidogg. country属性,以及根据哪个国家进行分组)对搜索结果进行分组。
我注意到Elastic Search通过折叠(ref 1)或聚合(ref 2)支持此功能。因此,我很想知道OpenSearch是否提供类似的功能。如果您也能给予一个实现此结果的查询示例,那就太好了。谢谢。
参考1:https://www.elastic.co/guide/en/elasticsearch/reference/current/collapse-search-results.html参考2:How to get latest values for each group with an Elasticsearch query?
附加问题:对于每个分组,最多可以显示多少个结果?是否有一种方法可以显示无限制的结果?

kgsdhlau

kgsdhlau1#

你在OpenSearch中看过Bucket aggregations吗?
例如,您可以使用terms聚合来根据特定字段(如“country”)对搜索结果进行分组。下面是一个基本的示例查询(您可以自定义以满足您的特定需求):

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

“size”参数被设置为0,这意味着我们不想检索任何命中,只想检索聚合结果。
这个查询的结果将是一个桶列表,“country”字段的每个唯一值对应一个桶,沿着每个桶中的文档计数。
terms聚合中的“size”参数设置为10,这意味着将根据每个bucket中的文档数量返回前10个bucket。
来自文档:默认情况下,OpenSearch生成的存储桶不超过10,000个。您可以使用size属性更改此行为,但请记住,如果查询范围非常广,包含数千个存储桶,则性能可能会受到影响。
因此,您可以将terms聚合中的“size”参数调整为适合您需要的任何值,具体取决于“country”字段中唯一值的数量以及您想要显示的存储桶数量。请记住,较大的值可能会影响性能并增加查询的响应时间。

相关问题