如何在elasticsearch中保存geo数据

r7s23pms  于 2023-03-29  发布在  ElasticSearch
关注(0)|答案(1)|浏览(184)

如何在elasticsearch(geo数据类型)中索引包含以下数据的文档?

<west>5.8663152683722</west>
<north>55.0583836008072</north>
<east>15.0418156516163</east>
<south>47.2701236047002</south>

我尝试了geo_point和它的工作为lon和lat的,不知道如何保存这些数据.任何帮助是高度赞赏.

ss2ws0br

ss2ws0br1#

你必须使用geo_shape数据类型,并在同步之前将XML(我假设)半点转换为线字符串或多边形。

我在这里用一个多边形。让我们想象一下传统的cardinal directions

North (+90)
               |
(-180) West  ——+—— East (+180)
               |
             South (-90)

geo_shape需要类似GeoJSON的输入,因此您需要五个坐标点,其中第一个和最后一个是相同的(根据GeoJSON规范)。
因此,借用TurfJS并从左下逆时针方向,

const lowLeft = [west, south];
const topLeft = [west, north];
const topRight = [east, north];
const lowRight = [east, south];

return 
[ 
  [
    lowLeft,
    lowRight,
    topRight,
    topLeft,
    lowLeft
  ]
]

最后,让我们创建我们的索引,并插入您的数字
一个二个一个一个
然后验证正方形的中心是否确实在索引多边形内:

GET example/_search
{
  "query": {
    "geo_shape": {
      "location": {
        "shape": {
          "type": "point",
          "coordinates": [
            10.45406545999425,
            51.1642536027537
          ]
        },
        "relation": "intersects"
      }
    }
  }
}

相关问题