我的用户包括city,country,followersAmount和其他一些字段。当我通过追随者数量按照“纽约,美国”在城市和乡村领域搜索时,我需要首先显示来自“纽约,美国”的人员按照跟随者排序下降,然后我需要显示来自美国其他城市的人按照追随者排序降序。我认为我只能通过术语频率进行评分,然后首先按分数排序,其次是跟随者数量,但我无法找到如何配置。
答案 0 :(得分:1)
这样的事情:
{
"query" : {
"bool" : {
"should" : [
{
"constant_score" : {
"query" : {
"match" : {
"city" : "New York"
}
}
}
},
{
"constant_score" : {
"query" : {
"match" : {
"country" : "USA"
}
}
}
}
]
}
},
"sort" : [
"_score",
{ "followersAmount" : { "order" : "desc"} }
]
}
你可以期待来自“纽约,美国”的人得到相同的分数。不是来自纽约而是来自美国的人将获得相同的分数。对于那些得分相同的人,他们将按照粉丝排序。当然,这只是一个初步的查询,可以帮助您入门 - 可能需要更多的调整和内容。
编辑:更新为constant_score
我期望基本的TF-IDF算法和字段长度的结合来帮助。一般来说,与国家/地区的条款相比,我预计城市的条款会有更大的相关IDF。因此,城市比赛的得分越高似乎是可取的。就TF和场长规范而言,只有一个匹配城市的人得分高于一个人说两个城市(如果你碰巧有这些领域的数组允许多个城市),这似乎也是有利的。但是,我不确定你的数据是什么样的。我已经更新了查询,以便Elasticsearch的基本算法不会使用constant_score查询产生这样的影响。