1

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

这个问题来自查看 Elastics 文档以进行重新索引:https ://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html

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

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,而不是名称field-to-change-name-of来自“from-index”的字段

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

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

PS 我碰巧在 Elasticsearch 6.2 上工作,但我认为我的问题适用于所有具有_reindexapi 的版本(听起来像2.3.0 及更高版本)

4

1 回答 1

1

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

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

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

于 2018-03-13T04:56:29.940 回答