我的一个文档(id = emergency)是一个半径为30000米的圆:
GET seller-67/_doc/emergency
{
"_index": "seller-67",
"_type": "_doc",
"_id": "emergency",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"location": {
"type": "circle",
"coordinates": [
99.8131968,
13.550437
],
"radius": "30000m"
}
}
}
我想知道
纬度= 13.7054285,经度= 99.5806321
就在这个圈子里。
为此,我使用以下请求:
POST seller-67/_search
{
"query": {
"bool": {
"filter": [
{
"geo_shape": {
"location": {
"shape": {
"type": "point",
"coordinates": [
99.5806321,
13.7054285
]
}
}
}
}
]
}
}
}
答案如下:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "seller-67",
"_type" : "_doc",
"_id" : "emergency",
"_score" : 1.0,
"_source" : {
"location" : {
"coordinates" : [
99.8131968,
13.550437
],
"type" : "circle",
"radius" : "30000m"
}
}
}
]
}
}
因此,根据答案,点lat = 13.7054285,lon = 99.5806321位于文件紧急情况(半径为30000m的圆,圆心:lat = 13.550437,lon = 99.8131968)但是当我计算这两个点之间的距离时,结果是3045m。
既然3045〉3000,为什么elasticsearch会对我的请求返回这个结果呢?
1条答案
按热度按时间3j86kqsm1#
Tldr;
你好,在最新版本的elasticsearch中,圆不是一个原生的形状。它们使用polygons to approximate a circle。
你会在引擎盖下使用这个吗?这可以解释错误?因为它嵌在管道中。