【问题标题】:Elasticsearch backfill two fields into one new field after calculationsElasticsearch 计算后将两个字段回填为一个新字段
【发布时间】:2016-12-15 00:47:00
【问题描述】:

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

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

  • 我需要能够重新索引大约 60 天的数据。
  • 我需要为每个文档的 payload.time_sec 和 payload.time_nanosec 取两个字段,取其中的值并对它们进行一些数学运算(time_sec * 10**9 + time_nanosec),然后将其作为单个字段返回到重新索引的文件

我正在查看带有批量助手的 Python API 文档: http://elasticsearch-py.readthedocs.io/en/master/helpers.html

但我想知道这是否可能。

我的想法是使用: 批量帮助器提取滚动 ID(批量 _update?),遍历每个文档 ID,从每个停靠栏的两个字段中提取数据,进行数学运算,并使用新字段数据完成更新请求。

有人做过吗?也许有一个 groovy 脚本的东西?

谢谢!

【问题讨论】:

    标签: python elasticsearch groovy


    【解决方案1】:

    批量帮助器提取滚动 ID(批量 _update?),遍历每个文档 ID,从每个停靠点的两个字段中提取数据,进行数学运算,并使用新字段数据完成更新请求。

    基本上是的:

    • 使用/_search?scroll 获取文档
    • 执行您的操作
    • 发送/_bulk更新请求

    其他选项有:

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

    【讨论】:

    • 我一直在使用python解决这个问题,将在新的回复中发布代码sn-ps
    • @fastfiveoh 你最终采用了哪种解决方案?我遇到了类似的问题,想知道哪种方式最好。
    • @RobinWang 我终于写好了脚本,你可以在我的repo中看到它:[link]github.com/fastfiveoh/python-es-reindex/blob/master/…
    【解决方案2】:

    这是我所在的位置(大致):

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

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

    【讨论】:

    • 也是我移动到新索引的原因,然后将删除旧索引并将别名指向新索引是采用新的映射模板。
    • 听起来更适合使用_reindex API
    • 是的,我不认为重新索引会很好。我正在检查 3 个月前的数据完整性,回填了大约 6 到 8 个新字段。
    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2022-06-21
    • 1970-01-01
    • 2020-06-24
    • 2016-11-23
    相关资源
    最近更新 更多