Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Elasticsearch在计算后将两个字段回填到一个新字段中_Python_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Groovy - Fatal编程技术网 elasticsearch,groovy,Python,elasticsearch,Groovy" /> elasticsearch,groovy,Python,elasticsearch,Groovy" />

Python Elasticsearch在计算后将两个字段回填到一个新字段中

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文档和批量帮助程序: 但我想知道这是

问题。我的任务是研究如何在Elasticsearch中回填数据。到目前为止有点空。基本要点是:

注意:所有文档都存储在每日索引下,每天约有200k个文档

  • 我需要能够重新索引大约60天的数据
  • 我需要为每个doc payload.time_sec和payload.time_nanosec取两个字段,取其中的值并对其进行计算(time_sec*10**9+time_nanosec),然后将其作为单个字段返回到重新编制索引的文档中
我正在查看Python API文档和批量帮助程序:

但我想知道这是否可能

我的想法是: 批量助手拉取一个滚动ID(批量更新?),迭代每个文档ID,从每个dock的两个字段中拉取数据,进行计算,并用新字段数据完成更新请求

有人这样做吗?也许是有groovy脚本的东西

谢谢

批量助手拉取一个滚动ID(批量更新?),迭代每个文档ID,从每个dock的两个字段中拉取数据,进行计算,并用新字段数据完成更新请求

基本上,是的:

  • 使用
    /\u搜索?滚动
    获取文档
  • 执行您的操作
  • 发送批量更新请求
其他选择包括:


  • 如果你不想创建一个新的索引,可能就不太好了
两者都支持脚本编写,如果我理解正确的话,这将是一个完美的选择,因为您的更新不依赖于外部因素,所以这也可以直接在服务器内完成。

我现在的位置(大致上):

我一直在使用Python和bulk helpers,到目前为止,我在这里:

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个新字段。