如何geo_distance过滤Elasticsearch中的多个位置字段

时间:2012-10-03 19:30:09

标签: search search-engine elasticsearch django-haystack

每个文档我有一个任意位置数据点(最多80个)。我想对这些位置执行geo_distance过滤器。 elasticsearch文档声称:

  The geo_distance filter can work with multiple locations / points per document. 
  Once a single location / point matches the filter, the document will be included in the filter.

从未明确如何实现这一目标。我假设您必须提前定义位置数,以便索引文档看起来包含这些嵌套字段:

 {
"pin" : {
    "location" : {
        "lat" : 40.12,
        "lon" : -71.34
    }
  }
}

{
"alt_pin" : {
    "location" : {
        "lat" : 41.12,
        "lon" : -72.34
    }
}
}

我假设你会以某种方式过滤pin.location和alt_pin.location。

如果我有任意数量的位置(pin1,pin2,pin3,......)怎么办?我可以这样做:

"pin" : {
    "locations" : [{
        "lat" : 41.12,
        "lon" : -72.34
    }, {
        "lat" : 41.12,
        "lon" : -72.34
    }]
}
}

这项工作会有一些变化吗?也许使用geo_hashes而不是lat / lng坐标?

1 个答案:

答案 0 :(得分:0)

多个location值可以表示为location个字段的数组。试试这个:

{
    "pin": [
        {
            "location" :{
                "lat": 40.12,
                "lon": -71.34
            }
        },
        {
            "location" :{
                "lat": 41.12,
                "lon": -72.34
            }
        }
    ]
}