在Elasticsearch映射中禁用_source
字段的确切后果是什么?
_source
字段上令人惊讶的简短documentation本身仅表明
虽然非常方便,源字段确实会在索引中产生存储开销。因此,它可以被禁用。
没有解释当它被禁用时究竟变得“不那么方便”。让我们点击get api的链接:
默认情况下,get操作返回_source字段的内容,除非您使用了fields参数或者禁用了_source字段。
再次,当_source
被禁用时,如何做到与众不同?文档本身是否完全不可用(只剩下聚合)?系统是否会回退到从单个领域重新组装文档的昂贵过程?
这太令人费解了。网络上用于优化Elasticsearch性能的许多文档建议在不需要时禁用_source
«。我怎么知道我需要它?
答案 0 :(得分:1)
Elasticsearch文档确实有一个部分评论了保留_source
here所带来的好处和功能。对我来说最有影响的两个好处(在链接文档中列举)是:
如果没有_source字段,部分更新请求将无法运行。
当您的映射更改并且需要重新索引数据时,您可以直接从Elasticsearch执行此操作,而不必从另一个(通常较慢的)数据存储中检索所有文档。
当然,文档中讨论了所有其他要点,但如果您的用例需要支持增量文档级更新,那么您几乎肯定需要启用_source
。
如果您拥有大量数据并发现您的映射往往非常不稳定并经常更改,那么您几乎肯定希望启用_source
来降低重建索引的成本。我目前的一个项目是在最初的原型设计/开发阶段,所以这个好处绝对适用。
答案 1 :(得分:0)
您根据已编入索引的内容搜索 Elasticsearch。数据通过存储的内容返回。默认情况下,fields are not stored。要查看它们,需要从_source重新解析它们。
因此,您可以禁用_source,但请确保存储需要查看的字段。
给予更多权衡here。