问题。我的任务是研究如何在Elasticsearch中回填数据。到目前为止有点空洞。基本要点是:
注意:所有文档都存储在每日索引下,每天约有20万个文档。
我正在查看带有批量助手的Python API文档: http://elasticsearch-py.readthedocs.io/en/master/helpers.html
但我想知道这是否可能。
我的想法是使用: 批量助手用于提取滚动ID(批量_update?),遍历每个文档ID,从每个停靠点的两个字段中提取数据,进行数学运算,并使用新的字段数据完成更新请求。
有人这样做过吗?也许是一个时髦的剧本?
谢谢!
答案 0 :(得分:1)
批量帮助程序用于提取滚动ID(批量_update?),遍历每个文档ID,从每个停靠点的两个字段中提取数据,进行数学运算,并使用新的字段数据完成更新请求。 / p>
基本上,是的:
/_search?scroll
获取文档/_bulk
更新请求其他选项包括:
/_reindex
API如果您不想创建新索引,可能不太好/_update_by_query
API 两者都支持脚本,如果我理解正确的话,它将是完美的选择,因为您的更新不依赖于外部因素,所以这也可以直接在服务器内完成。
答案 1 :(得分:0)
这是我(大致)的地方:
我一直在使用Python和批量帮助器,到目前为止在这里:
doc = helpers.scan(es, query={
"query": {
"match_all": {}
},
"size":1000
},index=INDEX, scroll='5m', raise_on_error=False)
for x in doc:
x['_index'] = NEW_INDEX
try:
time_sec = x['_source']['payload']['time_sec']
time_nanosec=x['_source']['payload']['time_nanosec']
duration = (time_sec * 10**9) + time_nanosec
except KeyError: pass
count = count + 1
x['_source']['payload']['duration'] = duration
new_index_data.append(x)
helpers.bulk(es,new_index_data)
从这里开始我只是使用批量python帮助器插入新索引。但是,我将尝试使用批量更新对现有索引进行更改和测试。
这看起来像是一种正确的方法吗?