在Solr中,我们如何使用搜索查询外部的术语来偏向结果排序?

时间:2015-03-02 14:52:00

标签: solr solrnet

我们正在制定计划以识别用户感兴趣的内容标签。例如,我们可能会确定用户X比其他标签更频繁地使用标记为“kermit”和“piggy”的内容。这些是他们的“青睐的标签。”

当用户搜索时,我们希望偏向/偏见包含这些术语的文档。

这意味着我们无法在索引时提升文档,因为每个用户都会有不同的偏好标签。此外,他们可能不会自己搜索喜欢的标签。他们可能会搜索“奇闻趣事”,所以我们绝对想给他们提供带有“奇闻趣事”的文件,但我们想要提升包含“kermit”或“piggy”的文件。

这些偏好的标签不用于实际查询索引,而是用于偏向结果排序。受欢迎的标签成为破坏者 - 在其他条件相同的情况下,包含这些条款的文件将排名更高。

这是新的/计划开发,因此我们可以使用任何版本和解析器堆栈来解决此问题。

SolrNet中的解决方案

下面正确回答了这个问题,但这里是SolrNet的代码,以防万一其他人正在使用它。

var localParams = new LocalParams();
localParams.Add("bq", "kermit^10000); //numeric value is the degree of boost

var solr = ServiceLocator.Current.GetInstance<ISolrOperations<MySolrDocumentClass>>();
solr.Query(new SolrQuery("whatever") + localParams);

1 个答案:

答案 0 :(得分:0)

您没有指定您正在使用的查询解析器,但如果您使用的是DismaxExtended Dismax查询解析器,那么bq参数应该完全正确你在寻找什么。 bq仅为了影响相关性而向搜索添加搜索条件,但不限制结果集。

来自Dismax文档:

  

bq(提升查询)参数

     

bq参数指定了一个附加的可选查询子句   将添加到用户的主要查询中以影响分数。对于   例如,如果您想为最近的文档添加相关性提升:

q=cheese 
bq=date:[NOW/DAY-1YEAR TO NOW/DAY]
     

您可以指定多个bq参数。如果你想要你的查询   解析为具有单独提升的单独子句,使用多个bq   参数。

在这种情况下,您可能希望将&bq=kermit&bq=piggy添加到Solr查询的末尾。如果您没有使用这些查询解析器之一,则此需求可能正是您需要切换的动机。