我正在尝试确定如何对查询结果进行排序或评分,以便首先返回特定字段上具有显式匹配的文档,然后返回其他匹配文档的上升距离。
按照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
,如果涉及提升,则需要在查询中定义,而不是索引。
答案 0 :(得分:2)
对于排序规范,请使用:
sort = query({!field f = PostalCode v = 12345})+ desc,geodist()+ asc
您可以对字段,分数和功能查询进行排序。函数查询开辟了很多可能性,“query()”函数查询打开得更多,如上所示。 query()将返回其中的查询的分数,在这种情况下,搜索具有特定值的字段。我选择使用'field'查询解析器,但您也可以{!v =“PostalCode:12345”}。
顺便说一句,不要忘记geodist()的其他参数,比如'pt'和'sfield'。