使用函数查询在Solr中提升分数

时间:2013-11-09 10:38:38

标签: solr lucene full-text-search solrnet solr4

我在Solr 4上工作,根据存储在Index中的人气排名来优化我的solr结果排名。

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

  

新的相关性等级=得分* popularrank

我一直在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,但我无法找到如何做到这一点。

任何帮助都是高度适用的。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用Solr提供的_val_挂钩。

例如,要按score * popularityrank排序,请尝试使用此

http://solr:8983/solr/select?q=hp%20laptop&_val_="product(score,popularityrank)"

答案 1 :(得分:0)

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

因此,如果您正在尝试此操作: new_score =得分*受欢迎程度,请使用以下格式。

q = searchterm& sort = product(查询($ q),受欢迎程度) desc

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