按字段大小对文档进行排序

时间:2016-01-19 17:06:58

标签: elasticsearch

我的文档如下索引,

1

 {
"name": "Gilly",
"hobbyName" : "coin collection",
"countries": ["US","France","Georgia"]
}

2

 {
"name": "Billy",
"hobbyName":"coin collection",
"countries":["UK","Ghana","China","France"]
}

现在我需要根据字段“countries”的数组长度对这些文档进行排序,这样排序后的结果将是order2,document1的顺序。如何使用elasticsearch实现这一目标?

2 个答案:

答案 0 :(得分:3)

您可以使用script based sorting来实现此目标。

{
   "query": {
      "match_all": {}
   },
   "sort": {
      "_script": {
         "type": "number",
         "script": "doc['countries'].values.size()",
         "order": "desc"
      }
   }
}

答案 1 :(得分:2)

我建议在Elasticsearch中使用令牌计数类型。 通过使用脚本,可以完成(可以使用脚本检查here如何使用脚本)。但结果不会是完美的。 脚本主要使用字段数据缓存,并且删除了副本。

您可以阅读有关如何使用令牌计数类型here的更多信息。