您可以为包含标签数量的其他字段建立索引,然后在其上轻松地对结果进行排序。否则,如果您愿意在查询时付出一点性能成本,那么有个不错的解决方案不需要重新索引数据:您可以根据如下脚本进行排序:
{
"query" : {
"match_all" : {}
},
"sort" : {
"_script" : {
"script" : "doc['tags'].values.length",
"type" : "number",
"order" : "asc"
}
}
}
从基于脚本的排序部分可以看到:
请注意,对于基于单个自定义脚本的排序,建议使用custom_score查询,因??为基于分数的排序更快。
这意味着最好使用自定义分数查询来影响您的分数,然后按分数排序,如下所示:
{
"query" : {
"custom_score" : {
"query" : {
"match_all" : {}
},
"script" : "_score * doc['tags'].values.length"
}
}
}