基于动态的、递增的日期变量创建多个字典
create multiple dictionaries based on a dynamic, increasing date variable
我在变量 body 中存储了一个 elasticsearch body 字典:
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-26" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
我的问题是在 "match" 字段中,我需要增加
{ "dates": "2019-07-26" }
根据用户输入的日期回溯按天划分。
我开发了 date lookback 变量来根据用户输入的 days_back 天数输出一个回溯 # 天的日期列表。
我对将这个日期列表单独集成到 body 字典中以便在 elasticsearch 中进行多次搜索感到非常迷茫。
我开发日期列表的代码如下:
# dates desired outputted in a list
base = dt.date.today()
days_back = 5 # USER INPUT
date_list = [base - dt.timedelta(days=x) for x in reversed(range(days_back + 1))]
dates = ['{}-{}-{}'.format(y,m,d) for y, m, d in map(lambda x: str(x).split('-'), date_list)]
并输出列表:['2019-07-21', '2019-07-22', '2019-07-23', '2019-07-24', '2019-07-25','2019-07-26']
所以我需要的是像这样输出多个正文字典:
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-26" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-25" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-24" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-23" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
等只有日期字段发生变化。
请帮忙!我没有成功插入 for 循环。提前致谢!
创建一个没有显式 dates
key/value 对的基本字典,然后在该查询的循环中为它分配您想要的日期:
import datetime as dt
import copy
base = dt.date.today()
days_back = 5 # USER INPUT
date_list = [base - dt.timedelta(days=x) for x in reversed(range(days_back + 1))]
base_body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": {} }, "filter": { "terms": { "tawgs.db_id": [] } } } }}
for date in date_list:
body = copy.deepcopy(base_body)
body['query']['filtered']['query']['match']['dates'] = date.strftime("%Y-%m-%d")
print(body)
结果:
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/21'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/22'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/23'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/24'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/25'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/26'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
我在变量 body 中存储了一个 elasticsearch body 字典:
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-26" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
我的问题是在 "match" 字段中,我需要增加
{ "dates": "2019-07-26" }
根据用户输入的日期回溯按天划分。
我开发了 date lookback 变量来根据用户输入的 days_back 天数输出一个回溯 # 天的日期列表。
我对将这个日期列表单独集成到 body 字典中以便在 elasticsearch 中进行多次搜索感到非常迷茫。
我开发日期列表的代码如下:
# dates desired outputted in a list
base = dt.date.today()
days_back = 5 # USER INPUT
date_list = [base - dt.timedelta(days=x) for x in reversed(range(days_back + 1))]
dates = ['{}-{}-{}'.format(y,m,d) for y, m, d in map(lambda x: str(x).split('-'), date_list)]
并输出列表:['2019-07-21', '2019-07-22', '2019-07-23', '2019-07-24', '2019-07-25','2019-07-26']
所以我需要的是像这样输出多个正文字典:
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-26" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-25" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-24" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": { "dates": "2019-07-23" } }, "filter": { "terms": { "tawgs.db_id": products } } } } })
等只有日期字段发生变化。
请帮忙!我没有成功插入 for 循环。提前致谢!
创建一个没有显式 dates
key/value 对的基本字典,然后在该查询的循环中为它分配您想要的日期:
import datetime as dt
import copy
base = dt.date.today()
days_back = 5 # USER INPUT
date_list = [base - dt.timedelta(days=x) for x in reversed(range(days_back + 1))]
base_body = {"fields": ["dates","c_u", "tawgs.db_id"], "query": { "filtered": { "query": { "match": {} }, "filter": { "terms": { "tawgs.db_id": [] } } } }}
for date in date_list:
body = copy.deepcopy(base_body)
body['query']['filtered']['query']['match']['dates'] = date.strftime("%Y-%m-%d")
print(body)
结果:
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/21'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/22'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/23'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/24'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/25'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}
{'fields': ['dates', 'c_u', 'tawgs.db_id'], 'query': {'filtered': {'query': {'match': {'dates': '2019/07/26'}}, 'filter': {'terms': {'tawgs.db_id': []}}}}}