使用Solr Join查询位置

时间:2013-06-27 21:35:18

标签: solr

这是我的数据结构:

Users (UserName, Location)
UserRecords (RecordId, Username, Category)

示例数据

Users: 
    (Bob, "38.45,-88.14"), 
    (Alice, "36.11,-87.32"), 
    (Jake, "37.45,-85.02")

UserRecords:
    (1, Bob, Medical), 
    (2, Bob, Contact), 
    (3, Alice, Medical), 
    (4, Jake, Social)

我想查询其所有者属于某个边界框的特定类型的所有记录ID。示例:想要所有医疗记录ID,其所有者在(36,-89)到(39,-88)之内:

这是我的Solr查询

q={!join+from=Username+to=UserName+fromIndex=Users}+(Location:[36.00,-89.00 TO 39.00,-88.00]) +(Category:Medical)

错误是:类别字段未定义

如果我只使用Location重复相同的请求,则返回空结果而不会出错。

我可以告诉位置查询有效,因为此调用会返回所有需要的用户:

q=Location:[36.00,-89.00 TO 39.00,-88.00]

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:

/solr/UserRecords/select/?q=Category:Medical&fq={!join+from=Username+to=UserName+fromIndex=Users}Location:[36.00,-89.00 TO 39.00,-88.00]

我假设您有2个名为“Users”和“UserRecords”的集合

答案 1 :(得分:0)

结果证明效果很好:

q=
{!join+from=id+to=Username+fromIndex=Users}             
{!geofilt+sfield=Location+pt=38.89,-77.03+d=5}
& fq=Category:Medical

它不是以前要求的边界框,而是更好的方法