ES给索引添加字段属性,并更新属性的值

URL:http://10.251.96.69:9200/pro_channel_store_product_v2/_mapping/doc

请求类型:PUT

请求体:

{
  "properties": {
    "deliveryType": {
      "type": "long"
    }
  }
}

说明:pro_channel_store_product_v2是一个索引库的名字,使用时,需要改成你需要的索引名,这个请求将会添加一个类型为long,名字叫deliveryType的属性

 

URL:http://10.251.96.69:9200/pro_channel_store_product_v2/_update_by_query

请求类型:POST

请求体:

{
    "script": {
        "source": "ctx._source['deliveryType']='1';"
    },
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "channelCode": {
                            "value": "22"
                        }
                    }
                },
                {
                    "terms": {
                        "storeCode": [
                            "9284","9286","9287","9289","9290","9297","9299","9300","9308","9316"
                        ]
                    }
                }
            ]
        }
    }
}

说明:query中的是查询条件,会按条件查询出数据,并把查到的数据的deliveryType属性的值设置为1

这种先查询,后修改的方式,有一个很大的优势,就是可以避免ES的版本冲突,昨天晚上半夜开始刷ES数据,加上deliveryType字段,并赋值,结果一直爆出版本冲突,在同事志翔的帮助下,改成这种修改方式,解决了版本冲突。

 

原来有问题的请求体:

{
  "script": {
    "lang": "painless",
    "inline": "if ((ctx._source.storeCode == '9068' || ctx._source.storeCode == '9080' || ctx._source.storeCode == '9082' || ctx._source.storeCode == '9084' || ctx._source.storeCode == '9085') && ctx._source.channelCode=='22') {ctx._source.deliveryType=1}"
  }
}

 

### 如何向Elasticsearch索引映射中添加字段 当需要更新现有的Elasticsearch索引以包含新字段时,可以通过PUT Mapping API来实现这一操作。对于已有的索引`user`,如果想要新增加`name`, `sex`, 和 `tel`这三个字段,则可以发送如下HTTP请求[^4]: ```json PUT /user/_mapping { "properties": { "name": { "type": "text", "index": true }, "sex": { "type": "keyword", "index": true }, "tel": { "type": "keyword", "index": false } } } ``` 得注意的是,在某些情况下,可能希望为特定类型的文档创建独立的别名以便更好地管理和查询数据。例如,不是直接针对某个具体的索引名称进行写入,而是采用不同的别名为不同种类的数据设置对应的索引路径[^1]。 另外,需要注意的一点是,虽然可以在现有索引上追加新的字段定义,但如果尝试更改已有字段数据类型或其它重要属性,则可能会遇到困难,因为这通常涉及到重新构建整个索引结构[^2]。 最后,还可以通过编程方式动态地扩展映射配置。比如下面这段Java代码展示了如何利用JSON构建器构造一个新的字段将其加入到当前索引的映射之中[^3]: ```java try { XContentBuilder mappingBuilder = XContentFactory.jsonBuilder() .startObject().startObject(type).startObject("properties") .startObject("club").field("type", "string") .field("index", "analyzed").field("analyzer", "english") .endObject() .endObject().endObject().endObject(); } catch (Exception e) { logger.error("--------- putIndexMapping 创建 mapping 失败:", e); return false; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值