gpt4 book ai didi

使用地理点的 Elasticsearch 动态映射

转载 作者:行者123 更新时间:2023-12-02 22:16:19 25 4
gpt4 key购买 nike

我们使用 Elasticsearch 为无模式数据编制索引。问题是我们要索引的大多数条目都包含 "longitude""latitude""lat"“长”

索引该数据以便字段类型允许使用地理距离过滤器进行搜索的最佳方法是什么?

非常感谢。

最佳答案

我知道你发布这篇文章已经有一段时间了,但如果有人像我一样偶然发现它,这里有一些方法可以做到这一点。

在我们的例子中,我们需要一个动态半径,所以这是我们拥有的映射:

"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 :

"filter" : {
"geo_distance" : {
"geopoint" : [ 5.7, 43.5 ],
"distance" : "15km"
}
}

虽然在我们这边,我们需要一个动态范围,所以除了使用 script filter 之外我们没有找到任何其他解决方案。 .

"filter" : {
"script" : {
"script" : "!doc['geopoint'].empty && doc['geopoint'].distanceInKm(43.5,5.7) <= doc['radius'].value"
}
}

关于使用地理点的 Elasticsearch 动态映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16148633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com