将默认值添加到弹性搜索中的现有映射

Ern*_*sto 6 elasticsearch

我有一个带有映射的索引。我决定向现有映射添加一个新字段:

{

  "properties": {
    "sexifield": {
      "type": "keyword",
      "null_value": "NULL"
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

据我了解,当我重新索引时,该字段应该出现在现有文档中。所以当我使用 api 重新索引时:

{
  "source": {
    "index": "index_v1"
  },
  "dest": {
    "index": "index_v2",
    "version_type": "external"
  }
}
Run Code Online (Sandbox Code Playgroud)

我看到 index_v2 的映射不包含 sexifield,文档也不包含它。而且这个操作花费了不到 60 毫秒。

请指点我,我不明白的地方...

使用 sexifield 将新文档添加到第一个索引(通过 java API,对于没有此字段(sexifield)的实体,因此弹性可能应该添加默认索引),也不会为我创建这个附加字段。

预先感谢您的提示。

问候

JBo*_*one 3

很好的问题+1(我在解决你的问题时学到了一些东西)

我不知道在重新索引时如何考虑第二个映射(重新索引映射)的答案,但以下是在从原始索引完成重新索引后如何更新重新索引索引(所有文档)。我仍在继续研究,看看是否有一种方法可以在重新索引时考虑第二个索引的映射中定义的默认值,但现在看看这个解决方案是否有帮助。

POST /index_v2/_update_by_query
{
  "script": {
    "lang": "painless",
    "inline": "ctx._source.sexifield = params.null_value",
    "params": {
      "null_value": "NULL"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)