弹性搜索中的一种挑战

时间:2017-01-06 02:40:53

标签: elasticsearch

我有多家公司,每家都有多个产品。它们已作为具有以下结构的文档添加到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分组。但我的对象有很多字段,我需要在搜索结果中返回完整的文档。

2 个答案:

答案 0 :(得分:0)

在elasticsearch排序查询是数组,所以你可以按多个字段排序,看看 Sort documentation

答案 1 :(得分:0)

使用以下sort子句对多个字段上的弹性文档进行排序 首先按productid排序,然后按companyid排序。

{
    "sort": [{
        "productid": {
            "order": "desc"
        }
    }, {
        "companyid": {
            "order": "desc"
        }
    }],
    "size": 100
}

由于