如何根据ElasticSearch中的项目数对搜索结果进行排序?

假设我将这样的文档存储在ElasticSearch中:

{

'name':'user name',

'age':43,

'location':'CA, USA',

'bio':'into java, scala, python ..etc.',

'tags':['java','scala','python','django','lift']

}

假设我使用location = CA进行搜索,如何根据“标签”中项目的数量对结果进行排序?

我想在首页中列出标签数量最多的人。

回答:

您可以为包含标签数量的其他字段建立索引,然后在其上轻松地对结果进行排序。否则,如果您愿意在查询时付出一点性能成本,那么有个不错的解决方案不需要重新索引数据:您可以根据如下脚本进行排序:

{

"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"

}

}

}

以上是 如何根据ElasticSearch中的项目数对搜索结果进行排序? 的全部内容, 来源链接: utcz.com/qa/412358.html

回到顶部