不是一个通用排序字段,而是一个我希望按该顺序返回的文档ID列表。示例:document_ids=[5,3,10,6]我可以按顺序查询solr中的文档5、3、10、6吗?
h5qlskok1#
您可以使用bq-param(BoostQuery)进行此操作,然后按分数排序,这是默认值。
q=id:5+OR+id:3+OR+id:10+OR+id:6&bq=id:5^4+id:3^3+id:10^2
正如您在bq参数中看到的,每个ID都会得到一个递减的提升值,直到最后一个(在您的示例中为6)不再获得任何提升。由于您按ID搜索,每个文档都会有相同的分数,因此以这种方式提升它们将得到您想要的排序顺序。关于参数的一些参考
bq
如果您使用的是标准请求处理程序或(e)DisMax,这在任何情况下都有效
q=id:5^4+OR+id:3^3+OR+id:10^2+OR+id:6
这利用了术语提升,这在主题“使用^*提升术语”下面的in the reference documentation中进行了解释。逻辑与上述相同。
e3bfsja22#
Solr使用^=运算符支持ConstantScore,而不是boost。它基本上为任何匹配文档分配指定的常量分数,当您只关心特定子句的匹配,而不需要其他相关因素(如术语频率)时,这是理想的。因此,您可以简单地通过为查询中的id指定一个递减的常量分数来获得所需的顺序。
q=id:(id1^=4 OR id2^=3 OR id3^=2 OR id4^=1)
这将为id=id1的文档分配一个恒定的分数4(因此它将排在第一位),为id=id 2的文档分配3,以此类推。
2条答案
按热度按时间h5qlskok1#
使用Boost查询
您可以使用bq-param(BoostQuery)进行此操作,然后按分数排序,这是默认值。
正如您在
bq
参数中看到的,每个ID都会得到一个递减的提升值,直到最后一个(在您的示例中为6)不再获得任何提升。由于您按ID搜索,每个文档都会有相同的分数,因此以这种方式提升它们将得到您想要的排序顺序。关于参数的一些参考
使用术语增强
如果您使用的是标准请求处理程序或(e)DisMax,这在任何情况下都有效
这利用了术语提升,这在主题“使用^*提升术语”下面的in the reference documentation中进行了解释。逻辑与上述相同。
e3bfsja22#
Solr使用^=运算符支持ConstantScore,而不是boost。它基本上为任何匹配文档分配指定的常量分数,当您只关心特定子句的匹配,而不需要其他相关因素(如术语频率)时,这是理想的。因此,您可以简单地通过为查询中的id指定一个递减的常量分数来获得所需的顺序。
这将为id=id1的文档分配一个恒定的分数4(因此它将排在第一位),为id=id 2的文档分配3,以此类推。