2015-09-08 123 views
0

我想通過elasticsearch上傳一個json文件到我的服務器,但是我想在我上傳它之前映射它,但是我不斷收到搜索階段執行異常錯誤。 JSON數據看起來像這樣elasticsearch上的映射格式

{"geometry":{"type":"Point","coordinates":[-73.20266100000001,45.573647]},"properties":{"persistent_id":"XVCPFsbsqB7h4PrxEtCU3w==","timestamp":1408216040000,"tower_id":"10.48.66.178"}} 

到目前爲止,我已經試過這是我的映射。林不知道我做錯了......

curl –XPUT 'http://localhost:9200/carrier/_search?q=coordinates?pretty=true' -d' 
{ 「geometry」: { 
「type」 : {「type」 : 「string」}, 
「coordinates」 : {「type」 : 「geo_point」} 
}, 
「properties」 : { 
「persistent_id」 : {「type」 : 「string」}, 
「timestamp」: { 「type」 : 「long」}, 
「tower_id」 : {「type」 : 「string」} 
}' 

回答

1

這裏有幾個問題。首先,您需要使用put mapping請求而不是搜索請求。請求的主體必須以該類型的名稱開頭,後跟您添加的properties(字段)列表。第二個問題是,您可能複製了一些文檔中的示例,其中所有ASCII格引號(")被替換爲其花哨的Unicode版本(),並且XPUT參數前面的破折號看起來像n-dash ,而不是正常破折號-。您需要用它們的ASCII版本替換所有花哨的引號和破折號。因此,所有一起工作的語句應該是這樣的(假設doc爲您的文檔類型):

curl -XPUT 'http://localhost:9200/carrier/doc/_mapping' -d '{ 
    "doc": { 
     "properties": { 
      "geometry": { 
       "properties": { 
        "type": { 
         "type": "string" 
        }, 
        "coordinates": { 
         "type": "geo_point" 
        } 
       } 
      }, 
      "properties": { 
       "properties": { 
        "persistent_id": { 
         "type": "string" 
        }, 
        "timestamp": { 
         "type": "long" 
        }, 
        "tower_id": { 
         "type": "string" 
        } 
       } 
      } 

     } 
    } 
}' 

那麼你可以添加文件是這樣的:

curl -XPUT 'http://localhost:9200/carrier/doc/1' -d '{"geometry":{"type":"Point","coordinates":[-73.20266100000001,45.573647]},"properties":{"persistent_id":"XVCPFsbsqB7h4PrxEtCU3w==","timestamp":1408216040000,"tower_id":"10.48.66.178"}}' 

請注意,爲了添加如果您已經嘗試將文檔添加到此索引並且映射已經創建,則可能需要刪除並重新創建索引。

+0

非常感謝!我甚至沒有注意到「 –

+0

也只是出於好奇,我怎麼去搜索讓我們說座標 –

+0

這應該是一個不同的問題;)有幾種方法。例如,您可以使用[地理距離](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-filter.html)過濾器。 – imotov

1

這是因爲你使用的_search端點,以便安裝你的映射。

您必須使用_mapping終點,而不是像這樣:

curl –XPUT 'http://localhost:9200/carrier/_mapping/geometry' -d '{ 
    ...your mapping... 
}'