2013-10-08 93 views
1

仅使用位置进行Bbox搜索会返回准确的数据;但如果我们添加更多的搜索参数,返回的距离分值获取错误车道Solr - 如何按地理空间距离排序并返回距离?

对于EG-

案例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}

- 它返回正确的距离为store- “得分”:0.02656421

案例2:

但是,如果我添加其他检查,以B-盒,则返回错误距离得分

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} AND :)

-the上面一个返回“分数”:0.7258905,这是不对的。它应该与上面的一样。

情况下3:

只是为了确保,已经添加了store-

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} AND id:9220)

- 现在这其中也返回错误的距离 - “分数的ID的检查“:9.05333

我没有得到什么问题在这里。 在此先感谢。

回答

1

将每个'AND'部分查询放入Solr过滤器查询('fq'参数)中,并为关键字搜索相关性留下'q'。在你的字段列表('fl'param)中,你可以通过函数查询返回距离:fl=*,dist:geodist()。像'pt'和'sfield'这样的其他参数是必需的。要排序,请使用sort=geodist() asc

但是,在v4.5之前的Solr版本中,不能使用空间“RPT”字段的geodist()函数查询。我看到你正在使用4.4。如果您需要在Solr 4.2到4.4中对RPT字段进行排序(只有在您有多个位置时才需要),那么您必须以不同的方式处理这个问题,并且您的尝试很接近。我建议你总是使用'​​q'和'fq'参数,因为你通常应该使用它们(分别是关键字和过滤器)。考虑到我的查询的这个echoParams输出到Solr:

"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开始,你不必再诉诸于此。

顺便说一句,你看到的行为实际上不是一个错误。你需要以不同的方式组合你的查询来获得你想要的结果。