6

我正在研究 Solr 4,用于根据 Index 中存储的流行度排名优化我的 solr 结果排名。

现在,当有人搜索时,除了相关性排名之外,我还想使用流行度排名来影响相关性排名。最简单的公式可能是:

新的相关度排名 = 得分 * 人气排名

我一直在http://wiki.apache.org/solr/FunctionQuery#product上查看 Solr 函数查询以实现相同的目的,但是,我不确定如何使其工作。我不知道如何使用乘积函数将分数相乘。试图完成它,我总是收到错误,因为未定义字段。

现在我可以使用此处定义的 boost How to boost fields in solr,但我有额外的逻辑/要求,我想使用 Solr 提供的功能查询。

例如,我尝试了以下似乎可行的简单查询

http://solr:8983/solr/select?q=hp%20laptop&defType=edismax&fl=Id,Name,score&bf=product%28$v1,$v2%29&v1=Id&v2=2

现在,对于我的实际要求,我想将分数作为 $v2,但是我无法找到如何做到这一点。

任何帮助都会受到高度赞赏。

4

2 回答 2

2

您可以尝试使用_val_Solr 提供的钩子。

例如,为了排序score * popularityrank,尝试使用这个

http://solr:8983/solr/select?q=hp%20laptop&_val_="product(score,popularityrank)"
于 2013-11-10T02:45:14.797 回答
1

使用 query() 函数来获取 'score' 的值。

因此,如果您尝试这样做:new_score = score *流行度,请使用以下格式。

q=searchterm& sort=product(query($q),popularity) desc

query($q) - 返回查询的 TF-IDF 分数。所以这相当于使用'score'字段。

于 2017-01-23T23:24:27.937 回答