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

In Solr, how can we use terms external to the search query to bias result ordering?

我们正在制定一项计划来识别我们的用户感兴趣的内容标签。因此,例如,我们可能会确定用户 X 更频繁地消费带有 "kermit" 和 "piggy" 标签的内容比其他标签。这些是他们的"favored tags."

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

这意味着我们无法在索引时提升文档,因为每个用户都会有不同的偏好标签。此外,他们可能不会自己搜索喜欢的标签。他们可能会搜索 "gonzo,",因此我们绝对想为他们提供带有 "gonzo," 的文档,但我们希望提升 包含 "kermit" 或 "piggy."

这些偏爱的标签并不用于实际查询索引,而是用于偏向结果排序。受欢迎的标签成为决胜局——在其他条件相同的情况下,包含这些术语的文档排名更高。

这是 new/planned 开发,所以我们可以使用任何版本和解析器堆栈来解决这个问题。

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);

您没有指定您使用的是哪个查询解析器,但如果您使用的是 Dismax or Extended Dismax 查询解析器,则 bq 参数应该完全符合您的要求。 bq 将搜索条件添加到搜索中只是为了影响相关性,而不是为了限制结果集。

来自 Dismax 文档:

The bq (Boost Query) Parameter

The bq parameter specifies an additional, optional, query clause that will be added to the user's main query to influence the score. For example, if you wanted to add a relevancy boost for recent documents:

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

You can specify multiple bq parameters. If you want your query to be parsed as separate clauses with separate boosts, use multiple bq parameters.

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