仅使用位置进行 Bbox 搜索会返回准确的数据;但是如果我们添加更多的搜索参数,返回的距离分数就会出错——
例如-
情况1:
-它返回商店的正确距离- “分数”:0.02656421
案例2:
但是,如果我使用 Bbox 添加另一个检查,它会返回错误的距离分数
- 上面的返回"score":0.7258905,这是错误的。应该和上面的一样。
案例3:
只是为了确保,添加了对商店 id 的检查-
- 现在这个也返回错误的距离 - “分数”:9.05333
我没有发现这里出了什么问题。提前致谢。
仅使用位置进行 Bbox 搜索会返回准确的数据;但是如果我们添加更多的搜索参数,返回的距离分数就会出错——
例如-
情况1:
-它返回商店的正确距离- “分数”:0.02656421
案例2:
但是,如果我使用 Bbox 添加另一个检查,它会返回错误的距离分数
- 上面的返回"score":0.7258905,这是错误的。应该和上面的一样。
案例3:
只是为了确保,添加了对商店 id 的检查-
- 现在这个也返回错误的距离 - “分数”:9.05333
我没有发现这里出了什么问题。提前致谢。
将查询的每个“与”部分放入 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 开始,您不再需要诉诸于此。
顺便说一句,您看到的行为实际上不是错误。您需要以不同的方式编写查询以获得所需的结果。