2

solr 排序,我想首先指定一个特定的文档

例如:

结果:5,2,3,1

我要2个,其他按规则排序

2,1,3,5

这该怎么做 ?

4

4 回答 4

2

我知道您可以尝试使用 Solr 解决此问题的两种方法。

第一个是使用QueryElevationComponent。这使您可以在索引时定义排名靠前的结果。正如文档中所建议的,这对于将赞助结果或热门文档放在搜索结果的顶部很有用。潜在的缺点是您必须能够在索引时而不是在查询时识别这些文档。

另一种方法是在查询时使用bq 参数来提升所需的文档。要提升文档 435,您可以执行以下操作:

...&bq=id:435^10

不幸的是,这些方法都不能让您绝对控制结果的顺序。

如果您不介意在执行搜索后处理结果,那么 Riking 提供的解决方案肯定可以完成这项工作。您可以考虑的另一种方法是向 Solr 模式添加一个字段,用于定义显示顺序或优先级。然后,您可以对该字段进行排序以获得所需的排序顺序。

于 2012-05-17T03:34:36.620 回答
2

如果您使用的是 Solr 3.1 或更高版本,则可以按函数查询排序map函数对此很有用。

sort=map(field_name,5,5,0) asc

在上面,field_name是您要排序的字段的名称,5是您要推到前面的值,并且0必须替换为您知道小于所有其他数字的某个数字。

于 2012-05-19T06:26:09.283 回答
0

调用内置的 sort() 函数,然后将所需元素移到前面。

伪代码,以防您没有内置方法将其移到前面:

tmp = desired;
int dIndex = array.indexOf(desired);
for(i=dIndex-1; i >= 0; i--)
{
    array[i+1] = array[i]
}
于 2012-05-17T03:03:01.003 回答
-1

如果您使用标准查询(不是 dismax),请在查询中添加“OR id:2^1000”。像这样:

q=(text:lalala AND author:Bob) OR id:2^1000

这会将 ID=2 的文档放在结果的顶部。

于 2012-05-17T07:08:00.830 回答