假设我在ElasticSearch中存储这样的文档:
{
'name':'user name',
'age':43,
'location':'CA, USA',
'bio':'into java, scala, python ..etc.',
'tags':['java','scala','python','django','lift']
}
让我说我使用location = CA进行搜索,如何根据“标签”中的项目数量对结果进行排序?
我想列出第一页中标记数量最多的人。
答案 0 :(得分:3)
您可以将包含标签数量的附加字段编入索引,然后您可以轻松地对结果进行排序。否则,如果您愿意在查询时支付一点性能成本,那么一个不需要重新索引数据的好解决方案:您可以sort基于这样的脚本:
{
"query" : {
"match_all" : {}
},
"sort" : {
"_script" : {
"script" : "doc['tags'].values.length",
"type" : "number",
"order" : "asc"
}
}
}
您可以从基于脚本的排序部分阅读:
注意,建议对于基于单个自定义脚本的排序, 使用custom_score查询代替基于分数的排序更快。
这意味着最好使用custom score query来影响您的分数,然后按分数排序,如下所示:
{
"query" : {
"custom_score" : {
"query" : {
"match_all" : {}
},
"script" : "_score * doc['tags'].values.length"
}
}
}