在弹性搜索中仅按术语频率排序

时间:2015-10-05 15:37:10

标签: sorting elasticsearch

我的用户包括city,country,followersAmount和其他一些字段。当我通过追随者数量按照“纽约,美国”在城市和乡村领域搜索时,我需要首先显示来自“纽约,美国”的人员按照跟随者排序下降,然后我需要显示来自美国其他城市的人按照追随者排序降序。我认为我只能通过术语频率进行评分,然后首先按分数排序,其次是跟随者数量,但我无法找到如何配置。

1 个答案:

答案 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查询产生这样的影响。