elasticsearch,kibana,Python,elasticsearch,Kibana" /> elasticsearch,kibana,Python,elasticsearch,Kibana" />

Python 地图地理多边形弹性搜索/Kibana 5.3

Python 地图地理多边形弹性搜索/Kibana 5.3,python,elasticsearch,kibana,Python,elasticsearch,Kibana,我有20000个geojson文件,格式如下: { "geometry": { "type": "Polygon", "coordinates": [ [ [long,lat], [long,lat], [long,lat], [long,lat], [long,lat]

我有20000个geojson文件,格式如下:

{
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [long,lat],
                [long,lat],
                [long,lat],
                [long,lat],
                [long,lat]
            ]
        ]
    },
我尝试的geo_形状和geo_点的所有映射要么没有显示在Kibana中,要么显示在Kibana中,但没有数据。将此映射到多个文件索引的最佳方法是什么?(如果没有好办法,我的下一个想法是在无法使用所有坐标的情况下,为每个文件创建一个中心点。也许可以使用第一个长的lat数组,并将其作为每个json文件的geo_点中心点。也不确定如何进行此操作)

这是在不更改任何内容的情况下索引ES时的默认映射:

{
  "indexname" : {
    "mappings" : {
      "my_type" : {
        "properties" : {
          "geometry" : {
            "properties" : {
              "coordinates" : {
                "type" : "float"
              },
              "type" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              }
            }
          },
更新 以下是我的新映射:

{
  "indexname" : {
    "mappings" : {
      "my_type" : {
        "properties" : {
          "geometry" : {
            "type" : "geo_shape",
            "tree" : "quadtree",
            "precision" : "1.0m"
          },
          "id" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
然而,当我去kibana时,我在尝试在增强tilemap上可视化时仍然会遇到一个错误:

No Compatible Fields: The "indexname" index pattern does not contain any of the following field types: geo_point
EDIT2 这是我创建映射的命令:

curl -XPUT "http://localhost:9200/indexname" -d "{\"mappings\" : {\"my_type\" : {\"properties\" : {\"geometry\" : {\"type\":\"geo_shape\", \"tree\": \"quadtree\", \"precision\": \"1m\"}}}}}"
我通过循环并发送post请求来索引我的文件:

r = requests.post(url_of_index, data=file(jsonfiles).read()) 

当我尝试将类型更改为geo_点,然后为文件编制索引时,我遇到了一个mapper解析器异常

您需要做的是创建自己的映射,该映射包含一个类型,因为ES本身不会从GeoJSON文档推断出该类型

PUT indexname
{
  "mappings": {
    "my_type": {
      "properties": {
        "geometry": {
          "type": "geo_shape",
          "tree": "quadtree",
          "precision": "1m"
        }
      }
    }
  }
}
创建此索引和映射后,您将能够为GeoJSON文件编制索引:

PUT indexname/my_type/1
{
  "geometry": {
    "type": "Polygon",
    "coordinates": [
        [
            [long,lat],
            [long,lat],
            [long,lat],
            [long,lat],
            [long,lat]
        ]
    ]
  }
}
更新

根据我们的讨论,您可能需要在地图中创建一个新的
geo_point
字段,如下所示:

PUT indexname
{
  "mappings": {
    "my_type": {
      "properties": {
        "location": {
          "type": "geo_point"
        },
        "geometry": {
          "type": "geo_shape",
          "tree": "quadtree",
          "precision": "1m"
        }
      }
    }
  }
}
然后从Python代码中,您需要通过读取JSON文件中的第一个坐标来创建该新字段,类似于下面的伪代码:

import json

doc = json.loads(file(jsonfiles).read())
# create the new location field
doc['location'] = doc['geometry']['coordinates'][0][0]
r = requests.post(url_of_index, data=json.dumps(doc)) 

我可以这样做,但仍然会得到相同的错误没有兼容的字段:“indexname”索引模式不包含以下任何字段类型:geo_point也许你应该更新你的问题,并显示你正在运行的命令和你正在得到的错误。updated--我想尝试在增强的tilemap上可视化一些内容。但是,geo_形状似乎不受支持。如何将多边形数组作为一个点使用?能否显示正在运行的用于索引文档的命令以及出现的错误?同时展示你在基巴纳的努力。我想了解ES/Kibana为什么抱怨
geo_point
。参见上面的Edit2