从elasticsearch按所给条件查询,利用查询结果的字段下载图片
# -*- coding: utf-8 -*-
import csv
from elasticsearch import Elasticsearch
import requests
import json
import cv2
import numpy as np
url_prefix = "http://xxxxxxx/image/" #图片服务器地址
# 参数配置://pypi.org/project/elasticsearch/
es = Elasticsearch(hosts="http://xxxxxxx/") #Elasticsearch地址
print(es.info())
# 查询的条件
query_json = {
"_source":"original_pic",
"query": {
"bool": {
"must": [
{
"term": {
"unit_id": "7839"
}
}
,
{
"range": {
"create_date": {
"gt": "2019-06-08",
"lt": "2019-06-11"
}
}
}
],
"must_not": [ ],
"should": [ ]
}
},
"from": 0,
"size": 100,
"sort": [ ],
"aggs": { }
}
query = es.search(index='camera_flow',body=query_json, scroll="5m")
results = query['hits']['hits'] # 查询出的第一页结果
total = query['hits']['total'] # 查询出的结果总数
scroll_id = query['_scroll_id'] # 游标用于控制输出结果
for i in range(0, int(total/100)+1):
# scroll必须指定,不然会报错
query_scroll = es.scroll(scroll_id=scroll_id,scroll='5m')['hits']['hits']
results += query_scroll
all_num = len(results)
for i in range(all_num):
origin_pic = results[i]['_source']['original_pic'] #获取图片的md5
img_url = url_prefix+origin_pic #拼接,获取图片下载的地址
try:
r = requests.get(img_url)
except Exception as e:
print "The request failed.", e
continue
else:
if r.status_code != 200:
print "Get img failed."
continue
img = cv2.imdecode(np.fromstring(r.content, np.uint8), cv2.IMREAD_COLOR)
save_name = "D:/download_image/original_pic/"+origin_pic+".jpg"
cv2.imwrite(save_name, img)