2017-06-22 99 views
0

我想將JSON對象添加到包含數組的ElasticSearch中。我正在使用python。 我的代碼看起來是這樣的:如何使用python將具有數組的JSON對象添加到ElasticSearch?

#This returns a list of mutual friends 
mutual_friends_list = get_mutual_friends(user_id, friend_id) 
mutual_friends_dict = {"id": 1, "mutual_friends": mutual_friends_list} 

#_DB is the module I have ElasticSearch 
_DB.add_mutual_friends(mutual_friends_dict) 

在其他模塊我有以下映射:

friend_attributes = str({ 
    "mappings": { 
    "friend_attributes": { 
     "properties": { 
     "id_str": { 
      "type": "string" 
      }, 
     "mutual_friends": { 
      "type": "long", "index_name": "tag" 
     } 
}).replace("'",'"') 

,我發現了以下錯誤:

raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, 
error_message, additional_info) 
elasticsearch.exceptions.RequestError: TransportError(400, 
'illegal_argument_exception', '[G3-P0l7][127.0.0.1:9300] 
[indices:data/write/index[p]]') 

我應該改變添加一個數組的JSON對象?

回答

0

嘗試使用json模塊將數據轉換爲JSON。

import json 

data = { 
    "mappings": { 
    "friend_attributes": { 
     "properties": { 
     "id_str": { 
      "type": "string" 
      }, 
     "mutual_friends": { 
      "type": "long", "index_name": "tag" 
     } 
} 

friend_attributes = json.loads(data) 
+0

我試過了,但沒有奏效。謝謝。 – felipe

+0

@felipe你能具體嗎?爲什麼它不工作? –

+0

@Coldspeeed我收到以下錯誤: raise HTTP_EXCEPTIONS.get(status_code,TransportError)(status_code,error_message,additional_info) elasticsearch.exceptions.RequestError:TransportError(400,'illegal_argument_exception','[G3-P017] [ 127.0.0.1:9300][indices:data/write/index[p]]') 當我沒有在mutual_friends中添加列表時,我的程序將數據發佈到彈性搜索中。如果我添加一個列表壓碎。 – felipe