我的elasticsearch中有一个包含多个字段的索引,我想从中获取2个字段组合(id,name)。如何编写查询,以便我想根据名称对结果进行排序(基于整个索引而不仅仅是结果集)并通过唯一 id 获取结果?
简而言之,我想找到与此 SQL 等效的内容:
SELECT DISTINCT id, name FROM abc ORDER BY name desc
请注意,我希望最终结果在整个索引上排序,而不仅仅是查询提供的结果集。
在 Elasticsearch 中编写此查询的最佳方式是什么?
根据我的理解,您希望根据
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
类型。