我有多家公司,每家都有多个产品。它们已作为具有以下结构的文档添加到elasticsearch索引中:
[{ "companyId": 1, "productId": 1, "productName": "c1p1" },
{ "companyId": 1, "productId": 2, "productName": "c1p2" },
{ "companyId": 2, "productId": 3, "productName": "c2p1" },
{ "companyId": 2, "productId": 4, "productName": "c2p2" },
{ "companyId": 3, "productId": 5, "productName": "c3p1" },
{ "companyId": 3, "productId": 6, "productName": "c3p2" }]
我需要以显示每个公司的第一个产品,然后是第二个产品等的方式对从elasticsearch返回的文档进行排序:
[{ "companyId": 1, "productId": 1, "productName": "c1p1" },
{ "companyId": 2, "productId": 3, "productName": "c2p1" },
{ "companyId": 3, "productId": 5, "productName": "c3p1" },
{ "companyId": 1, "productId": 2, "productName": "c1p2" },
{ "companyId": 2, "productId": 4, "productName": "c2p2" },
{ "companyId": 3, "productId": 6, "productName": "c3p2" }]
这可以通过使用“PARTITION BY companyId”在SQL Server中实现。但我在弹性搜索中找不到任何方法。
我知道使用聚合可以让你按companyId分组,然后按productId分组。但我的对象有很多字段,我需要在搜索结果中返回完整的文档。
答案 0 :(得分:0)
在elasticsearch排序查询是数组,所以你可以按多个字段排序,看看 Sort documentation
答案 1 :(得分:0)
使用以下sort子句对多个字段上的弹性文档进行排序 首先按productid排序,然后按companyid排序。
{
"sort": [{
"productid": {
"order": "desc"
}
}, {
"companyid": {
"order": "desc"
}
}],
"size": 100
}
由于