2017-04-14 49 views
0

我有這種格式20000個GeoJSON的文件:測繪地理多邊形彈性搜索/ Kibana 5.3

{ 
    "geometry": { 
     "type": "Polygon", 
     "coordinates": [ 
      [ 
       [long,lat], 
       [long,lat], 
       [long,lat], 
       [long,lat], 
       [long,lat] 
      ] 
     ] 
    }, 

所有我已經嘗試與geo_shape和geo_point要麼沒有Kibana露面或kibana顯示映射,但沒有數據。映射這個索引許多文件的最佳方法是什麼? (如果沒有好的方法,我的下一個想法是爲每個文件創建一箇中心點,如果我不能使用所有的座標,也許需要第一個long,lat數組,併爲每個json文件設置geo_point中心點。去了解這不是)

這是ES默認映射,當我的索引不改變任何東西:

{ 
    "indexname" : { 
    "mappings" : { 
     "my_type" : { 
     "properties" : { 
      "geometry" : { 
      "properties" : { 
       "coordinates" : { 
       "type" : "float" 
       }, 
       "type" : { 
       "type" : "text", 
       "fields" : { 
        "keyword" : { 
        "type" : "keyword", 
        "ignore_above" : 256 
        } 
       } 
       } 
      } 
      }, 

UPDATE 這是我的新的映射:

{ 
    "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\"}}}}}" 

我「M通過循環和發送POST請求我的索引文件:

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

當我嘗試的類型更改爲geo_point和然後索引我的文件,我遇到了映射器解析器異常。

回答

1

您需要做的是創建自己的包含geo_shape類型的映射,因爲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] 
     ] 
    ] 
    } 
} 

UPDATE

根據我們的討論,您可能需要創建一個新的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)) 
+0

我能做到這一點,但仍然得到同樣的錯誤不兼容字段:「indexname」索引模式不包含以下任何字段類型:geo_point – user6754289

+0

也許您應該更新您的問題並顯示您正在運行的命令以及您收到的錯誤。 – Val

+0

已更新 - 我想嘗試在增強的貼圖上顯示某些內容。但是,geo_shape似乎不被支持。我如何使用多邊形數組作爲一個點? – user6754289