- 录入数据时先在库里进行查询,如果数据存在的话,进行更新数据;如果库里面此条数据不存在的话,进行插入数据
- 以下是封装的完整代码可以参考
from elasticsearch import Elasticsearch
url = 'http://%s:%s/' % ('ip', 'port')
ES = Elasticsearch(url)
query = {
"query": {
"bool": {
"must": [],
}
}
}
def search_from_es(query, index, doc_type='type'):
""" 根据查询条件在ES中查找是否有对应的数据 """
update_id = None
search_result = False
exception = False
try:
res = ES.search(body=query, index=index, doc_type=doc_type)
except Exception as e:
exception = True
else:
if res["hits"]["total"] > 0:
hits = res["hits"]["hits"][0]
update_id = hits["_id"]
search_result = True
return search_result, update_id, exception
def load_data():
doc = {'values':['1.1.1.1']} # 需要进行操作的那条数据
index = 'index' # 索引名或者索引别名
ip = doc['values'][0] # 可以识别数据唯一性的字段
temp = {"term": {"values": ip}}
query["query"]["bool"]["must"].append(temp)
search_result, update_id, exception = search_from_es(query, index)
if search_result:
# 执行数据更新操作
try:
ES.update(index=index, doc_type='type', id=update_id, body={"doc": doc})
except Exception as e:
print(e)
message = "Internal server error"
code = 500
status = 500
elif exception:
# 查询数据出现异常
message = "Internal server error"
code = 500
status = 500
else:
# 执行数据插入操作
try:
ES.index(index=index, doc_type='type', id=update_id, body=doc)
except Exception as e:
print(e)
message = "Internal server error: index"
code = 500
status = 500