仅使用位置进行Bbox搜索会返回准确的数据;但如果我们添加更多搜索参数,则返回的距离得分会出错 -
例如 -
案例1:
-it返回商店的正确距离 - “得分”:0.02656421
案例2:
但如果我使用Bbox添加另一个检查,则返回错误的距离得分
- 上面的一个返回“得分”:0.7258905 ,这是错误的。它应该与上面的相同。
案例3:
为了确保,已经添加了一个带有商店ID的支票 -
- 现在这个也返回了错误的距离 - “得分”:9.05333
这里没有出错。 提前谢谢。
答案 0 :(得分:1)
将查询的每个“与”部分放入Solr过滤器查询('fq'param),并将“q”保留为关键字搜索相关性。在您的字段列表('fl'param)中,您可以放置一个函数查询来返回距离: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开始,您不再需要诉诸于此。
顺便说一下,你看到的行为实际上并不是一个bug。您需要以不同方式编写查询以获得所需的结果。