在弹性搜索中为现有映射添加默认值

时间:2019-07-04 14:02:06

标签: elasticsearch

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

{

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

}

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

{
  "source": {
    "index": "index_v1"
  },
  "dest": {
    "index": "index_v2",
    "version_type": "external"
  }
}

我看到index_v2的映射不包含sexifield,文档也不包含它。此外,此操作还不到60毫秒。

请指出,我对此不了解...

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

预先感谢您的提示。

致谢

1 个答案:

答案 0 :(得分:1)

大问题+1(我在解决您的问题时学到了东西)

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

POST /index_v2/_update_by_query
{
  "script": {
    "lang": "painless",
    "inline": "ctx._source.sexifield = params.null_value",
    "params": {
      "null_value": "NULL"
    }
  }
}