gpt4 book ai didi

elasticsearch - 具有距离首选项的Elasticsearch Geosearch

转载 作者:行者123 更新时间:2023-12-03 00:07:31 25 4
gpt4 key购买 nike

抱歉,菜鸟问题...我在Elasticsearch 2.3中拥有Restaurant对象,每个对象都有一个GeoPoint和一个送货上门的首选项。用伪代码

restaurant: {
location: (x, y)
deliveryPreference: 10km
}

和一个用户:
user {
location: (a,b)
}

我该如何搜寻寻找所有可在其区域内提供餐点的餐厅的使用者?

最佳答案

该解决方案涉及使用 geo_shape s。您需要按以下方式对餐厅文件进行建模:

PUT restaurants
{
"mappings": {
"restaurant": {
"properties": {
"name": {
"type": "text"
},
"location": {
"type": "geo_point"
},
"delivery_area": {
"type": "geo_shape",
"tree": "quadtree",
"precision": "1m"
}
}
}
}
}

然后,您可以按以下方式索引您的餐厅:
POST /restaurants/restaurant/1
{
"name": "My Food place",
"location": [-45.0, 45.0], <-- lon, lat !!!
"delivery_area": {
"type": "circle",
"coordinates" : [-45.0, 45.0], <-- lon, lat !!!
"radius" : "10km"
}
}

因此,每个餐馆将具有以其位置为中心并具有适当半径的圆形。

最后,当用户想知道哪个餐厅可以在她当前所在的位置交货时,可以发出以下 geo_shape query:
POST /restaurants/_search
{
"query":{
"bool": {
"filter": {
"geo_shape": {
"delivery_area": {
"shape": {
"type": "point",
"coordinates" : [<user_lon>, <user_lat>]
},
"relation": "contains"
}
}
}
}
}
}

在此查询中,我们正在检索 delivery_area形状包含用户当前所在的 point的餐馆。

关于elasticsearch - 具有距离首选项的Elasticsearch Geosearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890370/

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