2014-09-12 68 views
0

我有框架查询提交给solr,它具有以下格式。如何在查询中指定的给定顺序得到solr结果

id:95154 OR id:68209 OR id:89482 OR id:94233 OR id:112481 OR id:93843 

我想根据从开始的顺序获取记录。说我需要先获得ID为95154文件,然后ID 68209等文件等等。但它现在不发生,它首先给予最后一个ID 93843,有些时候是随机的。我在grails 2.1中使用solr,而我的solr版本是1.4.0。这里是我从索尔获取文档的示例方式

def server = solrService.getServer('provider') 
      SolrQuery sponsorSolrQuery = new SolrQuery(solarQuery) 
      def queryResponse = server.query(sponsorSolrQuery); 
      documentsList = queryResponse.getResults() 

回答

0

Lucene中没有这样的东西(我强烈假定,在Solr中也是这样)。在Lucene中,您可以根据文档字段的内容对结果进行排序,但不能根据查询中的子句顺序进行排序。

这意味着,你必须对结果进行排序自己:

documentsList = queryResponse.getResults() 
def sordedByIdOrder = solarQueryAsList.collect{ id -> documentList.find{ it.id == id } } 
0

由于@injecteer提到,没有什么内置Lucene的考虑在布尔查询子句的顺序,而是:

您可以对每个术语应用助推,只要该字段是基本字段(意思是,不是TextField),助推器将会干净利落地按照分数给予适当的排序。

id:95154^6 OR id:68209^5 OR id:89482^4 OR id:94233^3 OR id:112481^2 OR id:93843