2017-06-26 7 views
0

インデックスから最初のレコードに接続して選択することができます。しかし、私は "newval"パラメータでレコードを更新する必要があります。そして、updateメソッドはエラーで失敗している:pythonを使用してelasticsearchレコードを更新する

{'_index': 'packetbeat-2017.06.12', '_type': 'flow', '_id': 'AVyZmvuW4pXRFgxKGB7c', '_score': 1.0, '_source': {'@timestamp': '2017-06-12T00:01:30.000Z', 'beat': {'hostname': 'ip-172-31-73-228', 'name': 'ip-172-31-73-228', 'version': '5.4.1'}, 'dest': {'ip': '172.31.73.228', 'port': 9200, 'stats': {'net_bytes_total': 10015, 'net_packets_total': 46}}, 'final': True, 'flow_id': 'EAT/////AP//////CP8AAAFzfHHGrB9J5JLr8CM', 'last_time': '2017-06-12T00:00:30.732Z', 'source': {'ip': '115.124.113.198', 'port': 60306, 'stats': {'net_bytes_total': 141066, 'net_packets_total': 81}}, 'start_time': '2017-06-12T00:00:30.732Z', 'transport': 'tcp', 'type': 'flow'}} 

私の更新方法:

mybody={'doc': {'newval': 24}} 

es.update('packetbeat-2017.06.12', 'flow', 'AVyZmvuW4pXRFgxKGB7c', body=mybody, params=None) 
をここで

AttributeError: 'NoneType' object has no attribute 'copy' 

は、レコードが、私が更新する必要があることを返されたコード

import elasticsearch 
from elasticsearch import helpers 
es = elasticsearch.Elasticsearch('http://172.31.73.228:9200') 

myquery={"query": {"match_all": {}}} 
res = es.search(index="packetbeat-2017.06.12", body=myquery) 

for i in range(2): 
    print (res['hits']['hits'][i]) 

です

「ne」を追加できませんwval "変数を上記のレコードに追加します。

+1

なぜ '' 'params = None'''を渡しますか? – lucabelluccini

答えて

1

次のスニペットは、正常に動作します。

import elasticsearch 
es = elasticsearch.Elasticsearch('http://localhost:9200') 

res = es.search(index="packetbeat-2017.06.12", body={"query": {"match_all": {}}}) 

for single in res['hits']['hits']: 
    print (single) 

es.update('packetbeat-2017.06.12', 'flow', 'AVyZmvuW4pXRFgxKGB7c', body={'doc': {'newval': 24}}) 

要求のこの種をやって避けてご検討ください。 update by queryに関するドキュメントを確認してください。

関連する問題