Solr空间搜索 - 如何通过显式匹配然后按距离对文档进行排序?

时间:2013-02-03 19:11:51

标签: solr spatial-query

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

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

<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,如果涉及提升,则需要在查询中定义,而不是索引。

1 个答案:

答案 0 :(得分:2)

对于排序规范,请使用:

  

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

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

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