ElasticSearch -- es加字段并设置默认值

      因为es索引结构特性 当我们对现有索引新增字段时并不会影响历史数据,并且如果没有写入这个字段值时,也不会有默认值

所以有时我们需要对历史数据设置默认值

1.使用put方法加字段

my_index/_mapping/my_type

{
  "properties": {
    "字段":{
        "type": "类型"
    }
  }
}

2.设置默认值 使用post

my_index/_update_by_query

{
  "script": {
    "lang": "painless",
    "inline": "if (ctx._source.字段== null) {ctx._source.字段= '0'}"
  }
}

 

Elasticsearch 中增 `nested` 类型的字段为其设置默认值不是一件直接的事情,因为 Elasticsearch 的 Mapping 层面不支持直接设置字段默认值。不过,可以通过一些间接的方法来实现这一目标。 一种可能的方式是在创建文档时显式地为该字段提供一个默认值。这意味着每次向索引中添新的文档时,都需要手动为 `nested` 字段提供一个默认值。这种方法虽然繁琐,但在当前版本的 Elasticsearch 中是最直接的一种方法。 另一种更复杂的方法涉及使用脚本或者自定义逻辑,在索引前处理数据,从而确保每个文档都包含了所需的默认值。这通常涉及到编写自定义的应用程序逻辑,比如在应用程序层面处理数据写入操作,确保在写入 Elasticsearch 之前,所有的 `nested` 字段都被赋予了默认值。 还有一种方法是利用 Elasticsearch 的更新 API 来批量更新已存在的文档,为它们添缺失的 `nested` 字段填充默认值。具体来说,可以使用 `_update_by_query` API 来查找缺少特定字段的文档,通过脚本为这些文档添字段及其默认值。下面是一个简单的例子: ```json POST /book/_update_by_query { "script": { "source": """ if (!ctx._source.containsKey('nested_field')) { ctx._source['nested_field'] = [{/* default value */}]; } """, "lang": "painless" }, "query": { "bool": { "must_not": { "exists": { "field": "nested_field" } } } } } ``` 这段脚本会查找所有缺少 `nested_field` 字段的文档,为这些文档添字段以及预设的默认值。 需要注意的是,以上提到的方法都是变通之策,而不是直接支持默认值的功能。因此,在设计数据模型时应尽可能考虑到这些限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值