我使用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部分。
答案 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