Elasticsearch疑问:是否需映射不用于任何查询的属性?
关于Elasticsearch未映射字段仅保留在_source的实践判断
这完全不是不良实践,反而是优化Elasticsearch内存占用的合理操作,理由如下:
- 有效节省堆内存:Elasticsearch的字段映射信息会占用JVM堆内存,尤其是当文档中包含大量此类仅需返回的字段时,跳过它们的映射创建能显著减少内存开销,提升集群的稳定性和性能。
- 不影响_source的返回逻辑:_source存储的是原始文档的完整内容,只要写入文档时包含这些字段,即便没有对应的映射,查询时也能完整返回这些字段的值,完全满足你仅需在响应中返回的需求。
- 契合dynamic: false的设计初衷:你启用
dynamic: false的目的就是避免自动生成不必要的字段映射,这种只保留_source、不创建映射的操作正好符合这个配置的使用场景,能有效防止映射膨胀。
需要注意的一点是:如果后续业务需求变更,需要对这些字段进行过滤、聚合或搜索操作,你需要手动为这些字段添加映射,并且重新索引已有文档才能让新映射生效。所以只要你能确保这些字段永远不会用于搜索相关操作,当前的做法就没有任何问题。
内容的提问来源于stack exchange,提问作者Marco Antonio Soares Júnior
相关产品推荐
相关产品推荐

