在一个字符串数组的字段上对elasticsearch结果进行排序

时间:2014-08-14 14:56:16

标签: sorting elasticsearch

我正在搜索一些产品。 每个产品都有一个名为categories的数组字段。 我想按这些类别订购。 此外,这些类别具有层次结构。

以下是一些简化的示例产品

product1 = {"categories": ["Bath", "Bath shampoo", "Bath shampoo male"]}
product2 = {"categories": ["Bath", "Bath shampoo", "Bath shampoo child"]}
product3 = {"categories": ["Pets", "Bath", "Bath shampoo", "Bath shampoo animals"]}

这样他们就会被命令

["Bath", "Bath shampoo", "Bath shampoo child"]
["Bath", "Bath shampoo", "Bath shampoo male"]
["Pets", "Bath", "Bath shampoo", "Bath shampoo animals"]

(特殊情况)作为进一步的复杂性,假设我们按Bath过滤我们希望订单成为

["Pets", "Bath", "Bath shampoo", "Bath shampoo animals"]
["Bath", "Bath shampoo", "Bath shampoo child"]
["Bath", "Bath shampoo", "Bath shampoo male"]

我尝试将此排序脚本添加到查询中。

query["sort"] = {
    "_script": {
        "script": "string = ''; count = 0; for (value : doc['@flatCategories'].values) { string = string + value; count += 1} string;",
        "type": "string",
        "lang": "mvel",
        "order": "asc"
    }
}

但这似乎排除了字符串的总和而不是字母字符串

1 个答案:

答案 0 :(得分:0)

你可以添加一个名为merged_categories的字段,其中保持连接字符串,并按其排序