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

2024-05-20 00:01:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

注:所有文档都存储在每日索引下,每天大约有20万个文档。在

  • 我需要能够重新索引大约60天的数据。在
  • 我需要为每个医生取两个字段有效载荷时间\u秒以及有效载荷时间?毫微秒,获取这些值并对它们进行一些计算(time_sec*10**9+time_nanosec),然后将其作为单个字段返回到重新编制索引的文档中

我正在查看Python API文档和bulk helpers: http://elasticsearch-py.readthedocs.io/en/master/helpers.html

但我想知道这是否可能。在

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

有人这么做吗?也许有个很好的脚本?在

谢谢!在


Tags: 数据文档apitime时间secbulk批量
2条回答

以下是我的大致情况:

我一直在与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帮助程序将其插入到一个新索引中。不过,我将尝试对现有索引进行批量更新和测试。在

这看起来是一个正确的方法?在

Bulk helpers to pull a scroll ID (bulk _update?), iterate over each doc id, pull that data in from the two fields for each dock, do the math, and finish the update request with the new field data.

基本上,是的:

  • 使用/_search?scroll获取文档
  • 做你的手术
  • 发送/_bulk更新请求

其他选项包括:

两者都支持脚本,如果我理解正确的话,这将是一个完美的选择,因为您的更新不依赖于外部因素,所以这也可以直接在服务器内完成。在

相关问题 更多 >