使用Elasticsearch Bulk API时如何配置mapping排除_source指定字段
Elasticsearch Bulk API设置mapping的问题解答
核心结论
你示例中尝试在Bulk单条操作元数据里加mapping配置的写法是不可行的,Bulk API本身不支持在批量索引的同时修改或配置索引mapping。
原因说明
- Bulk API的每条操作元数据(即
{ "index" : {...} }段)仅支持配置单条操作级别的参数,比如索引名、文档ID、路由规则、版本控制参数等,不支持修改索引级别的配置项。 _source.excludes属于索引层面的静态配置,作用范围是整个索引的所有文档,必须在索引创建阶段或者重建索引时设置,不能和单条写入请求绑定配置。
可行实现方案
方案1:索引尚未创建的场景
第一步先调用Create Index API提前创建索引,配置好_source排除规则:
PUT /test { "mappings": { "_source": { "excludes": ["field1"] } } }
第二步再正常调用Bulk API写入数据即可,所有写入文档的field1都会自动从_source中排除,不需要在Bulk请求中加额外配置。
方案2:索引已存在的场景
_source相关的配置属于静态mapping,索引创建完成后无法修改,你需要按以下步骤操作:
- 创建一个新索引,配置好需要的
_source.excludes规则 - 通过Reindex API将旧索引的存量数据迁移到新索引
- 后续所有写入请求切换到新索引即可
内容的提问来源于stack exchange,提问作者Manoj Saini
相关产品推荐
相关产品推荐

