【问题标题】:Lowercase all fields in an index during reindexing in elasticsearch在elasticsearch中重新索引期间小写索引中的所有字段
【发布时间】:2018-03-14 04:16:50
【问题描述】:

我想重新索引一个索引,在这个过程中我想小写所有字段的值。 有什么办法可以做到这一点。

目前我已经研究了摄取管道,但您必须在其中命名每个需要转换为小写的字段。

{
  "lowercase": {
    "field": "foo"
  }
}

我想要一些可以小写所有字段值而无需提及字段名称的东西。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我建议在调用 Reindex API 时使用脚本。在脚本中,您可以遍历所有字段并将它们的值小写。像这样的东西应该可以工作:

    POST _reindex
    {
      "source": {
        "index": "source_index"
      },
      "dest": {
        "index": "target_index"
      },
      "script": {
        "source": "ctx._source.forEach((field, value) -> ctx._source[field] = value?.toLowerCase())}",
        "lang": "painless"
      }
    }
    

    【讨论】:

    • 非常感谢伙计。如果有 300 万个文档和 50 GB 的索引大小,只需一个查询就不会减慢数据处理速度
    • 当然会的。脚本始终是最后一个选择,但由于您不想枚举所有字段,据我所知,这几乎是您唯一的选择。但是,如果您只运行一次,因为您不想重新处理来自主要事实来源的原始数据,那应该没问题。
    • 知道了。谢谢?
    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2020-01-13
    相关资源
    最近更新 更多