1

仅使用位置进行 Bbox 搜索会返回准确的数据;但是如果我们添加更多的搜索参数,返回的距离分数就会出错——

例如-

情况1:

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q={!bbox score=distance sfield=geo pt=33.3232,-83.383 d= 150}

-它返回商店的正确距离- “分数”:0.02656421

案例2:

但是,如果我使用 Bbox 添加另一个检查,它会返回错误的距离分数

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q=({!bbox score=distance sfield=geo pt=33.3232,-83.383 d =150}和:)

- 上面的返回"score":0.7258905,这是错误的。应该和上面的一样。

案例3:

只是为了确保,添加了对商店 id 的检查-

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q=({!bbox score=distance sfield=geo pt=33.3232,-83.383 d =150} 和 id:9220)

- 现在这个也返回错误的距离 - “分数”:9.05333

我没有发现这里出了什么问题。提前致谢。

4

1 回答 1

1

将查询的每个“与”部分放入 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 开始,您不再需要诉诸于此。

顺便说一句,您看到的行为实际上不是错误。您需要以不同的方式编写查询以获得所需的结果。

于 2013-10-08T21:36:00.143 回答