【问题标题】:Elasticsearch: Set type of field while reindexing? (can it be done with _reindex alone)Elasticsearch:重新索引时设置字段类型? (可以单独使用 _reindex 完成吗)
【发布时间】:2018-03-13 01:44:05
【问题描述】:

问题:能否使用 Elasticsearch _reindex API 设置/重置通过它复制的字段的“字段数据类型”?

这个问题来自于查看 Elastics docs for reindex:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html

那些文档显示_reindex API 可以在复制内容时对其进行修改。他们给出了更改字段名称的示例:

POST _reindex
{
  "source": {
    "index": "from-index"
  },
  "dest": {
    "index":"new-index"
  },
  "script": {
    "source": "ctx._source.New-field-name = ctx._source.remove(\"field-to-change-name-of\")"
  }
}

script 子句将导致“new-index”有一个名为 New-field-name 的字段,而不是来自“from-index”的名为 field-to-change-name-of 的字段

文档暗示“脚本”功能具有很大的灵活性,但我不清楚这是否包括投影数据类型(例如引用数据以将其转换为字符串/文本/关键字,和/或将事物视为文字以尝试将字符串数据转换为非字符串(显然与危险作斗争)

如果在_reindex 中设置数据类型可能的,我假设它会是有效的和/或没有(也许是苛刻的)限制 - 我只是想更好地理解_reindex 功能的限制(并弄清楚我是否可以在一次交互中强制使用数据类型,而不是在执行重新索引命令之前将映射设置为新索引)

P.S. 我碰巧正在研究 Elasticsearch 6.2,但我认为我的问题适用于所有具有 _reindex api 的版本(听起来像 2.3.0 and greater

【问题讨论】:

    标签: elasticsearch reindex elasticsearch-6


    【解决方案1】:

    也许你混淆了一些术语。您指出的文档部分是指与文档关联的元数据,在这种情况下,_type 元字段只是告诉 Elasticsearch 特定文档属于特定类型(例如 user 类型),它不是与字段的数据类型相关(例如integerboolean)。

    如果您想设置/重置特定字段的映射,您甚至不需要根据您的情况使用脚本。您只需使用新映射创建目标索引并执行_reindex API。

    但是,如果您想更改不兼容值之间的映射(例如,将非数字字符串转换为具有“整数”数据类型的字段),则需要通过脚本或 ingest node 进行一些转换。

    【讨论】:

    • 感谢您的回复! - 我的目标是知道是否有办法在单个 _reindex 调用中设置字段/参数的数据类型。感谢您注意到可以使用映射预先创建“新索引” - 但我试图避免这项工作 - 我已经更新了我的问题以使这一切更加清晰
    • 我不确定我是否理解你的意思,但你想在同一个调用中使用_reindex API 设置新索引的映射吗?我认为只有通过动态映射才有可能。也许了解您的用例会有所帮助,您想完成什么样的任务。
    • _type 和字段的数据类型到底有什么区别?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2017-01-07
    • 1970-01-01
    • 2015-07-18
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多