Elasticsearch 中地理点的索引数组
Index array of geopoints in Elasticsearch
以下是我的(示例)弹性搜索数据,其中包含我试图编制索引的一系列地理坐标。
PUT geomap/_doc/1
{
"geometry": {
"coordinates": [
[
[
-10.8544921875,
49.82380908513249
],
[
-10.8544921875,
59.478568831926395
],
[
2.021484375,
59.478568831926395
],
[
2.021484375,
49.82380908513249
],
[
-10.8544921875,
49.82380908513249
]
]
]
}
}
这是我为它创建的 elasticsearch 映射。
PUT geomap
{
"mappings": {
"properties": {
"geometry": {
"properties": {
"coordinates": { "type": "geo_point" }
}
}
}
}
}
当我尝试插入数据时,它不起作用。我怀疑这是因为我有数组坐标数组。当我将示例数据集更新为单个坐标数组时,它起作用了(如下)。
PUT geomap/_doc/1
{
"geometry": {
"coordinates": [
[
-10.8544921875,
49.82380908513249
],
[
-10.8544921875,
59.478568831926395
],
[
2.021484375,
59.478568831926395
],
[
2.021484375,
49.82380908513249
],
[
-10.8544921875,
49.82380908513249
]
]
}
}
我很高兴知道我在映射中犯了什么错误,不允许我这样做。
我怀疑你的文档是一个多边形,所以你会想要使用 geo_shape
来代替:
PUT geomap
{
"mappings": {
"properties": {
"geometry": {
"type": "geo_shape",
"strategy": "recursive"
}
}
}
}
注意 "recursive" 策略 support more spatial queries(至少在较新的 ES 版本中)。
PUT geomap/_doc/1
{
"geometry": {
"coordinates": [
[
[
-10.8544921875,
49.82380908513249
],
[
-10.8544921875,
59.478568831926395
],
[
2.021484375,
59.478568831926395
],
[
2.021484375,
49.82380908513249
],
[
-10.8544921875,
49.82380908513249
]
]
],
"type": "polygon"
}
}
请注意如何将坐标数组包装在另一个数组中以符合 geojson 标准,并且添加了 type: polygon
属性。
以下是我的(示例)弹性搜索数据,其中包含我试图编制索引的一系列地理坐标。
PUT geomap/_doc/1
{
"geometry": {
"coordinates": [
[
[
-10.8544921875,
49.82380908513249
],
[
-10.8544921875,
59.478568831926395
],
[
2.021484375,
59.478568831926395
],
[
2.021484375,
49.82380908513249
],
[
-10.8544921875,
49.82380908513249
]
]
]
}
}
这是我为它创建的 elasticsearch 映射。
PUT geomap
{
"mappings": {
"properties": {
"geometry": {
"properties": {
"coordinates": { "type": "geo_point" }
}
}
}
}
}
当我尝试插入数据时,它不起作用。我怀疑这是因为我有数组坐标数组。当我将示例数据集更新为单个坐标数组时,它起作用了(如下)。
PUT geomap/_doc/1
{
"geometry": {
"coordinates": [
[
-10.8544921875,
49.82380908513249
],
[
-10.8544921875,
59.478568831926395
],
[
2.021484375,
59.478568831926395
],
[
2.021484375,
49.82380908513249
],
[
-10.8544921875,
49.82380908513249
]
]
}
}
我很高兴知道我在映射中犯了什么错误,不允许我这样做。
我怀疑你的文档是一个多边形,所以你会想要使用 geo_shape
来代替:
PUT geomap
{
"mappings": {
"properties": {
"geometry": {
"type": "geo_shape",
"strategy": "recursive"
}
}
}
}
注意 "recursive" 策略 support more spatial queries(至少在较新的 ES 版本中)。
PUT geomap/_doc/1
{
"geometry": {
"coordinates": [
[
[
-10.8544921875,
49.82380908513249
],
[
-10.8544921875,
59.478568831926395
],
[
2.021484375,
59.478568831926395
],
[
2.021484375,
49.82380908513249
],
[
-10.8544921875,
49.82380908513249
]
]
],
"type": "polygon"
}
}
请注意如何将坐标数组包装在另一个数组中以符合 geojson 标准,并且添加了 type: polygon
属性。