1

我正在尝试确定如何对查询结果进行排序或评分,以便首先返回在特定字段上具有显式匹配的文档,然后是升序距离的其他匹配文档。

按照 Solr 的空间教程中使用的示例,假设我有几个商店,看起来像这样(伪):

<Store>
  <Id>1</Id>
  <Coords>10,-15</Coords>
  <PostalCode>12345</PostalCode>
  <ServiceArea>
    <PostalCode>12345</PostalCode>
    <PostalCode>23456</PostalCode>
  </ServiceArea> 
</Store>

<Store>
  <Id>2</Id>
  <Coords>11,-16</Coords>
  <PostalCode>23456</PostalCode>
  <ServiceArea>
    <PostalCode>12345</PostalCode>
    <PostalCode>23456</PostalCode>
  </ServiceArea> 
</Store>

所以,两家店。每个人都有自己的邮政编码,并且每个人都为彼此的邮政编码提供服务。现在我想查询以下内容:

Find stores which service PostalCode 12345
Ordered by stores in PostalCode 12345 first
Then ordered by ascending distance from PostalCode 12345

我试图保持这个使用StandardQueryParser,如果涉及到提升,它需要在查询中定义,而不是在索引中定义。

4

1 回答 1

2

对于排序规范,使用:

sort=query({!field f=PostalCode v=12345})+desc,geodist()+asc

您可以对字段、分数和函数查询进行排序。函数查询开辟了很多可能性,如上所示,“query()”函数查询开辟了更多可能性。query() 将返回其中查询的分数,在这种情况下是搜索具有特定值的字段。我选择使用“字段”查询解析器,但您也可以使用 {!v="PostalCode:12345"}。

顺便说一句,不要忘记 geodist() 的其他参数,例如 'pt' 和 'sfield'。

于 2013-02-04T16:31:07.740 回答