我们使用 Elasticsearch 来索引无模式数据。问题是我们要索引的大多数条目都包含诸如"longitude"
、或之类"latitude"
的字段。"lat"
"long"
索引该数据的最佳方法是什么,以便字段类型允许使用地理距离过滤器进行搜索?
非常感谢。
我们使用 Elasticsearch 来索引无模式数据。问题是我们要索引的大多数条目都包含诸如"longitude"
、或之类"latitude"
的字段。"lat"
"long"
索引该数据的最佳方法是什么,以便字段类型允许使用地理距离过滤器进行搜索?
非常感谢。
我知道你发布这个已经有一段时间了,但如果有人像我一样偶然发现它,这里有一些方法可以做到。
在我们的例子中,我们需要一个动态半径,所以这是我们拥有的映射:
"mappings": {
"mygeopoints": {
"properties": {
"geopoint": {
"type": "geo_point",
"lat_lon" : true
},
"radius": {
"type": "long"
}
}
}
}
我们的文档使用如下所示的 SQL 查询进行索引:
SELECT label, (lat || ',' || lon) as geopoint, radius FROM points;
我们将地理点作为包含由逗号分隔的纬度和经度的字符串发送。
现在要搜索可以使用geo_distance 过滤器的点:
"filter" : {
"geo_distance" : {
"geopoint" : [ 5.7, 43.5 ],
"distance" : "15km"
}
}
不过,在我们这边,我们需要一个动态范围,所以除了使用脚本过滤器之外,我们没有找到任何其他解决方案。
"filter" : {
"script" : {
"script" : "!doc['geopoint'].empty && doc['geopoint'].distanceInKm(43.5,5.7) <= doc['radius'].value"
}
}