作为OpenSearch的新人,为了自己的业务需求正在摸索。具体来说,我正在寻找一个搜索引擎,它可以根据字段(例如国家属性,以及基于哪个国家/地区的分组)对搜索结果进行分组。
我注意到 Elastic Search 通过折叠(参考 1)或聚合(参考 2)支持此功能。因此,我有兴趣了解 OpenSearch 是否提供类似的功能。如果您还可以举一个实现此结果的查询示例,那就太好了。谢谢。
参考 1:https://www.elastic.co/guide/en/elasticsearch/reference/current/collapse-search-results.html 参考 2:如何使用 Elasticsearch 查询获取每个组的最新值?
奖金问题:对于每个分组,显示的最大结果数是多少?有没有办法显示无限的结果?
您看过 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
聚合中的“大小”参数调整为适合您需要的任何值,具体取决于“国家”字段中唯一值的数量以及您要显示的桶数。请记住,较大的值可能会影响性能并增加查询的响应时间。