【发布时间】:2023-03-04 08:38:01
【问题描述】:
我有类似这样的 ES 文档,我有一个带有类型字段的位置数组。
{
"type": "A/B/C",
"locations1": [
{
"lat": 19.0179332,
"lon": 72.868069
},
{
"lat": 18.4421771,
"lon": 73.8585108
}
]
}
类型值确定适用于该位置的距离。
假设A类的查询允许距离为10km,B类为100km,C类为1000km。 给定位置 L,我想找到所有满足给定位置的文档距离标准的文档,并且最终结果应该按距离排序。
我无法弄清楚如何为此使用动态半径。是否有可能或者我需要像这样更改我的文档结构?
编辑:
我也在考虑像这样破坏文档位置
"locationsTypeA": [
{
"lat": 19.0179332,
"lon": 72.868069
},
{
"lat": 18.4421771,
"lon": 73.8585108
}
],
"locationsTypeB": [
{
"lat": 19.0179332,
"lon": 72.868069
},
{
"lat": 18.4421771,
"lon": 73.8585108
}
],
"locationsTypeC": [
{
"lat": 19.0179332,
"lon": 72.868069
},
{
"lat": 18.4421771,
"lon": 73.8585108
}
]
}
然后我可以使用查询
"query": {
"bool": {
"should": [
{
"geo_distance": {
"distance": "10km",
"locationsTypeA": {
"lat": 12.5,
"lon": 18.2
}
}
},
{
"geo_distance": {
"distance": "100km",
"locationsTypeB": {
"lat": 12.5,
"lon": 18.2
}
}
},
{
"geo_distance": {
"distance": "1000km",
"locationsTypeC": {
"lat": 12.5,
"lon": 18.2
}
}
}
]
}
}
}
【问题讨论】:
-
您的查询是什么样的?
-
由于我是 Es 新手,我想不出如何为此创建查询,通常我将其作为过滤器
"geo_distance": { "distance": "200km", "_geoloc": { "lat": lat, "lon": lon } }但在这种情况下半径是动态的,不能也可以在文档中找到任何方法来做到这一点。
标签: elasticsearch