分类:N05_python
from flask import Flask, abort, request
from elasticsearch import Elasticsearch
import json
import os
app = Flask(__name__, template_folder='template', static_url_path='/', static_folder='resource')
app.config['SECRET_KEY'] = os.urandom(24)
app.jinja_env.auto_reload = True
app.config['TEMPLATES_AUTO_RELOAD'] = True
# 连接到Elasticsearch
es = Elasticsearch("http://172.17.0.2:9200")
# 显示文章列表,及其文章详情页
@app.route('/')
def index():
return 'wx服务器启动了4'
# 显示文章列表,及其文章详情页
@app.route('/exportES', methods=['GET', 'POST'])
def export_es():
name = request.args.get('name', None)
if name is None:
return "请输入index名称"
print("name:"+name)
export_real2(name)
return 'ok4'
def export_real2(name):
# 初始化scroll
index = "javatool03"
# 查询体,这里是一个简单的match_all查询
query_body = {
"query": {
"match_all": {}
}
}
# page = es.search(index=index, scroll='2m', size=1000, query={"query": {"match_all": {}}})
page = es.search(index=index, scroll='2m', size=1000, body=query_body)
sid = page['_scroll_id']
# print(page)
# scroll_size = page['hits']['total']['value']
scroll_size = page['hits']['total']
print("scroll_size:"+str(scroll_size))
# 开始滚动
filename = "es_export.json"
with open(filename, 'w') as f:
f.write('[')
first = True
if scroll_size > 0:
print(f"Scrolling over {scroll_size} documents...")
# page = es.scroll(scroll_id=sid, scroll='2m')
#
# print("page_size:" + str(page))
# 写入文件
if not first:
f.write(',')
first = False
# 将hits转换为字符串并写入文件
hits = json.dumps(page['hits']['hits'], indent=4, ensure_ascii=False)
f.write(hits)
# 更新scroll_id和剩余文档数
# sid = page['_scroll_id']
# scroll_size = len(page['hits']['hits']["_source"])
f.write(']')
# 清除scroll
es.clear_scroll(scroll_id=sid)
print(f"Exported {scroll_size} documents to {filename}")
def export_real(name):
# 指定索引名
index_name = name
# 查询所有文档
query = {
"query": {
"match_all": {}
}
}
# 获取数据
response = es.search(index=index_name, body=query)
# 将文档写入JSON文件
with open('export_%s.json' % index_name, 'w') as f:
for doc in response['hits']['hits']:
f.write(json.dumps(doc['_source']) + '\n')
if __name__ == '__main__':
app.run(debug=True)
# csrf.init_app(app)