【发布时间】:2014-07-02 22:30:51
【问题描述】:
我有一个用例,其中有 2 种类型的位置(即 geo_point 类型):
- 位置 1:有纬度/经度,半径 = 90 英里(会有所不同),类型 = 外出
- 位置 2:有一个纬度/经度,没有半径并且类型=传入
现在,当查询带有:lat/lon 和 radius=20 时,我预计会发生这种情况:
- 简单的地理查找:如果输入的纬度/经度在位置 2 的 20 英里范围内,则返回位置 2。
- 如果输入的纬度/经度在位置 1 的 90 英里范围内,则在结果中也返回位置 1。如果您注意到,我希望输入半径被保存的特定类型位置的半径覆盖。
这是我使用脚本想出的:
{
"query": {
"match_all": {}
},
"filter": {
"script": {
"script": "!doc['geopoint'].empty && doc['coverage_type'].value == 'outgoing' ? doc['geopoint'].distanceInMiles(37,-121) <= doc['radius'].value : doc['geopoint'].distanceInMiles(37,-121) <= 20"
}
}
}
其中“37,-121”是输入纬度/经度,20是输入半径。
您对查询有何看法,这是最好的方法吗?
原贴this on ES mailing list,不走运。
【问题讨论】:
标签: elasticsearch