Solr提升查询排序是否结果是否被另一个字段提升

时间:2017-07-25 16:31:07

标签: sorting search solr lucene

我使用Solr在我们的某个核心上运行查询。假设我的文档有两个字段:ID和Name。我还有一个单独的ID列表,我从数据库中抓取并传入查询以提高某些结果。

如果文档在查询中返回并且ID在列表中,则它将显示在结果的顶部,如果它在查询中返回并且ID不在列表中,那么它将低于那些在列表中。前者来自" boost"。我的查询是这样的 - http://mysolrserver:8983/solr/MyCore/MyQueryHandler?q=Smith&start=0&rows=25&bq=Id%3a(36+OR+76+OR+90+OR+224+OR+391)

我能够使提升查询起作用,但我需要按名称按字母顺序排列提升结果,然后按名称按字母顺序排列非提升结果。我需要知道& sort =参数的用户。 & sort =得分%20desc,名称+ asc不起作用。 我查看了很多文档,但我仍然不知道这是否可行。任何帮助表示赞赏。谢谢!

Solr版本是6.0.1。我实际上是在使用SolrNet与Solr接口,但我想如果我知道url& sort =参数值需要什么,我可以找出SolrNet部分。

2 个答案:

答案 0 :(得分:0)

与您的要求最匹配的是查询高程组件[1]。 在您的特定情况下,我将首先根据我的要求对其ID进行排序(例如按名称排序),然后将它们保存在elevate.xml中。

在查询时,您可以使用“forceElevation”参数强制提升,然后按名称对剩余结果进行排序。

[1] https://cwiki.apache.org/confluence/display/solr/The+Query+Elevation+Component

答案 1 :(得分:0)

我想通过取消提升查询来解决这个问题。我使用" exists"添加了一个排序查询。函数并传递ID的子查询。 exists返回一个布尔值进行排序,然后我将名称添加为第二种排序。它完美! URL如下所示:

http://mysolrserver:8983/solr/MyCore/MyQueryHandler?q=Smith&start=0&rows=25&sort=exists(query({!v=%27Id:(36+OR+76+OR+90+OR+224+OR+391)%27}))%20DESC,%20Name%20ASC