首页 > 解决方案 > elasticsearch为什么要设计“store”字段?

问题描述

默认情况下,对字段值进行索引以使其可搜索,但不会存储它们。这意味着可以查询该字段,但无法检索原始字段值。

我很好奇 Elasticsearch 后端的实现是如何工作的。他们如何使值不可检索但可搜索?(我想它需要存储在某个地方才能让您正确搜索它?)为什么 Elasticsearch 是这样设计的?以这种方式设计它达到了什么效率?

标签: elasticsearch

解决方案


源文档实际上是“存储”在_source字段中(但未编入索引),源文档的所有字段均已编入索引(但未存储)。通常可以_source使用源过滤从字段中检索所有字段值。这是默认配置 ES 的方式,但您可以随意更改它。

例如,您可以决定根本不存储_source文档,而只存储文档的某些字段。例如,如果您的文档有一个包含大量文本的字段,这可能是一个好主意。存储它可能不明智,_source因为这将占用大量空间。那个巨大的文本块可能只对全文搜索有用,因此只需要被索引,而所有其他字段可能也需要被索引和存储,因为它们需要被检索才能显示。

所以底线是:

  • 如果一个字段可以被搜索到,它就不需要存储,它只需要被索引
  • 如果可以检索字段,则可以将其配置为存储或从_source字段中检索/过滤(默认情况下存储)

推荐阅读