SOLR(3.1+) - 在同一请求中具有OR的多个空间查询

时间:2011-10-03 21:51:41

标签: solr spatial

是否可以在同一SOLR(3.1+)请求中进行多个空间查询?

我们目前需要允许用户通过前端搜索表单搜索其所选位置的广告资源。但我们还希望在幕后添加另一个空间搜索,以便包含更多库存。结果搜索将导致维恩图类型的搜索。

编辑10.4.2011

示例构造:q = *:*& fq = {!geofilt}& sfield =位置&(ClientId:“client1”& pt = 40.68063802521456,-74.00390625& d = 80.4672)%20OR%20_query_: (客户端Id: “客户端2” &安培; PT = 36.1146460,-115.1728160&安培; d = 80.4672)

上述结构不起作用,但希望能够证明我想要完成的任务。

3 个答案:

答案 0 :(得分:3)

这已经过时了,但似乎没有得到完整答案。我有同样的问题,发现这种语法有效:

q =*:*& fq = (({
            !geofilt sfield = Location pt = 40.68063802521456,
            -74.00390625 d = 80.4672
        }
            AND ClientId : "client1")OR({
            !geofilt sfield = Location pt = 36.1146460,
            -115.1728160 d = 80.4672
        }
            AND ClientId : "client2"))

答案 1 :(得分:0)

看起来,你想在一个请求中运行N个查询,以便为每个查询获得一个结果集?!

所以现场折叠(http://wiki.apache.org/solr/FieldCollapsing)就是你要找的。不幸的是,FieldCollapsing仅适用于3.3。

根据您的需要,计算不同分面搜索的结果可能也有用吗?!

答案 2 :(得分:0)

如果您将第二个位置查询移动到其他过滤查询中,如下所示:

q=*:*&fq={!geofilt}&sfield=Location&(ClientId:"client1"&pt=40.68063802521456,-74.00390625&d=80.4672)&fq={!geofilt}&sfield=Location&(ClientId:"client2"&pt=36.1146460,-115.1728160&d=80.4672)

这会提供您正在寻找的结果吗?它可能最终过于局限,但认为值得尝试。

您也可以尝试:

q=*:*&fq={!geofilt}&sfield=Location&((ClientId:"client1"&pt=40.68063802521456,-74.00390625&d=80.4672)%20OR%20(ClientId:"client2"&pt=36.1146460,-115.1728160&d=80.4672))