python elasticsearch操作
案例
import datetime
from elasticsearch import Elasticsearch
from celery_task.celery import app
def escon():
es = Elasticsearch(
['localhost:9200'], # 连接集群,以列表的形式存放节点的ip地址
sniff_on_start=True, # 连接前测试
sniff_on_connection_fail=True, # 节点无响应时刷新节点
sniff_timeout=60 # 设置超时时间
)
return es
@app.task
def esadd(result, ip):
'''新增一条文档'''
es = escon()
times = datetime.datetime.now() - datetime.timedelta(days=0, hours=8) # es内存储的时间和本地有8小时的时间差
times1 = datetime.datetime.now()
str_time = times.strftime("%Y-%m-%d %H:%M:%S")
str_time1 = times1.strftime("%Y-%m-%d %H:%M:%S")
try:
data = es.search(index="translate_erlog", doc_type='tranerLog')['hits']['hits'][-1] # 查看索引是否存在
except:
data = []
if data:
eid = int(data['_id']) + 1
m = es.index(index="translate_erlog", doc_type="tranerLog", id=eid,
body={'result': result, 'ip': ip, 'addtime': str_time1, 'timestamp': str_time}) # 索引存在则进行添加
else:
m = es.create(index="translate_erlog", doc_type='tranerLog', id=1,
body={'result': result, 'ip': ip, 'addtime': str_time1, 'timestamp': str_time}) # 索引不存在就创建
print(m)
@app.task
def del_esdata():
'''每天0点0分开始删除30天以前的数据'''
es = escon()
times = datetime.datetime.today() - datetime.timedelta(days=30, hours=8)
str_time = times.strftime("%Y-%m-%d %H:%M:%S")
body = {'query': {
"range": {
"timestamp": {
"lt": str_time
}
}}}
es.delete_by_query(index='translate_log', doc_type='tranLog', body=body)
es.delete_by_query(index='translate_erlog', doc_type='tranerLog', body=body)
print('delete over')