_source被禁用时究竟丢失了什么?

时间:2015-03-06 15:36:57

标签: elasticsearch

在Elasticsearch映射中禁用_source字段的确切后果是什么?

_source字段上令人惊讶的简短documentation本身仅表明

  

虽然非常方便,源字段确实会在索引中产生存储开销。因此,它可以被禁用。

没有解释当它被禁用时究竟变得“不那么方便”。让我们点击get api的链接:

  

默认情况下,get操作返回_source字段的内容,除非您使用了fields参数或者禁用了_source字段。

再次,当_source被禁用时,如何做到与众不同?文档本身是否完全不可用(只剩下聚合)?系统是否会回退到从单个领域重新组装文档的昂贵过程?

这太令人费解了。网络上用于优化Elasticsearch性能的许多文档建议在不需要时禁用_source«。我怎么知道我需要它?

2 个答案:

答案 0 :(得分:1)

Elasticsearch文档确实有一个部分评论了保留_source here所带来的好处和功能。对我来说最有影响的两个好处(在链接文档中列举)是:

  

如果没有_source字段,部分更新请求将无法运行。

     

当您的映射更改并且需要重新索引数据时,您可以直接从Elasticsearch执行此操作,而不必从另一个(通常较慢的)数据存储中检索所有文档。

当然,文档中讨论了所有其他要点,但如果您的用例需要支持增量文档级更新,那么您几乎肯定需要启用_source

如果您拥有大量数据并发现您的映射往往非常不稳定并经常更改,那么您几乎肯定希望启用_source来降低重建索引的成本。我目前的一个项目是在最初的原型设计/开发阶段,所以这个好处绝对适用。

答案 1 :(得分:0)

根据已编入索引的内容搜索 Elasticsearch。数据通过存储的内容返回。默认情况下,fields are not stored。要查看它们,需要从_source重新解析它们。

因此,您可以禁用_source,但请确保存储需要查看的字段。

给予更多权衡here