如何查找elasticsearch/opensearch中的唯一字段并按其值排序(其他一些字段)? (在elasticsearch中查找一组不同的值)

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

我的elasticsearch中有一个包含多个字段的索引,我想从中获取2个字段组合(id,name)。如何编写查询,以便我想根据名称对结果进行排序(基于整个索引而不仅仅是结果集)并通过唯一 id 获取结果?

简而言之,我想找到与此 SQL 等效的内容:

SELECT DISTINCT id, name FROM abc ORDER BY name desc

请注意,我希望最终结果在整个索引上排序,而不仅仅是查询提供的结果集。

在 Elasticsearch 中编写此查询的最佳方式是什么?

sql elasticsearch aggregation opensearch distinct-values
1个回答
0
投票

根据我的理解,您希望根据

id
字段检索唯一数据并根据
name
字段进行排序。

请查找以下查询,它将返回所需的输出。

POST sample_data/_search
{
  "size": 10000, 
  "_source": [
    "id",
    "name"
  ],
  "sort": [
    {
      "name": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "match_all": {}
  },
  "collapse": {
    "field": "id"
  }
}

以上查询将对索引中的所有数据进行排序,然后返回前 10000 个文档。如果您需要超过 10000 个结果,那么您需要使用 ES 的 search-after 功能。

您需要确保的另一件事是,

id
字段必须是
keyword
类型。

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