将查询的每个“与”部分放入 Solr 过滤器查询(“fq”参数),并为关键字搜索相关性留下“q”。在您的字段列表('fl' 参数)中,您可以放置一个函数查询以返回距离:fl=*,dist:geodist()
。需要其他参数,例如“pt”和“sfield”。要排序,请使用sort=geodist() asc
.
但是,在 v4.5 之前的 Solr 版本中,您不能使用geodist()
带有空间“RPT”字段的函数查询。我看到你正在使用 4.4。如果您需要在 Solr 4.2 到 4.4 中对 RPT 字段进行排序(仅当您有多个位置时才需要),那么您必须以不同的方式处理此问题,并且您的尝试很接近。我建议始终使用“q”和“fq”参数,因为您通常应该使用它们(分别是关键字和过滤器)。考虑我对 Solr 的查询的 echoParams 输出:
"indent":"true",
"wt":"json",
"sort":"query({!bbox v='' filter=false score=distance}) asc",
"fl":"*,score,dist:query({!bbox v='' filter=false score=distance})",
"sfield":"geo",
"pt":"33.3232,-83.383",
"d":"150",
"q":"*:*",
"fq":"{!bbox}",
"fq":"id:9220"
是的,很丑。同样,从 Solr 4.5 开始,您不再需要诉诸于此。
顺便说一句,您看到的行为实际上不是错误。您需要以不同的方式编写查询以获得所需的结果。