Python Elasticsearch在计算后将两个字段回填到一个新字段中
问题。我的任务是研究如何在Elasticsearch中回填数据。到目前为止有点空。基本要点是: 注意:所有文档都存储在每日索引下,每天约有200k个文档Python Elasticsearch在计算后将两个字段回填到一个新字段中,python,
elasticsearch,groovy,Python,
elasticsearch,Groovy,问题。我的任务是研究如何在Elasticsearch中回填数据。到目前为止有点空。基本要点是: 注意:所有文档都存储在每日索引下,每天约有200k个文档 我需要能够重新索引大约60天的数据 我需要为每个doc payload.time_sec和payload.time_nanosec取两个字段,取其中的值并对其进行计算(time_sec*10**9+time_nanosec),然后将其作为单个字段返回到重新编制索引的文档中 我正在查看Python API文档和批量帮助程序: 但我想知道这是
- 我需要能够重新索引大约60天的数据
- 我需要为每个doc payload.time_sec和payload.time_nanosec取两个字段,取其中的值并对其进行计算(time_sec*10**9+time_nanosec),然后将其作为单个字段返回到重新编制索引的文档中
- 使用
/\u搜索?滚动
获取文档
- 执行您的操作
- 发送批量更新请求
如果你不想创建一个新的索引,可能就不太好了
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)
从这里开始,我将使用BulkPython助手插入一个新索引。不过,我将尝试对现有索引进行批量更新来进行更改和测试
这看起来是一种正确的方法?到目前为止,我一直在使用python解决这个问题,我将以新的方式发布代码片段reply@fastfiveoh你最终采取了哪种解决方案?我遇到了类似的问题,不知道哪种方法是最好的。@RobinWang我终于写了这个脚本,你可以在我的repo:[link]中看到它,这也是我移动到新索引的原因,然后将删除旧索引并指向新索引的别名是采用新的映射模板。听起来更适合使用
\u reindex
APIYa我认为reindex不好。我正在检查3个月前的数据完整性,回填大约6-8个新字段。