elasticsearch - elasticsearch为什么要设计“store”字段?
问题描述
默认情况下,对字段值进行索引以使其可搜索,但不会存储它们。这意味着可以查询该字段,但无法检索原始字段值。
我很好奇 Elasticsearch 后端的实现是如何工作的。他们如何使值不可检索但可搜索?(我想它需要存储在某个地方才能让您正确搜索它?)为什么 Elasticsearch 是这样设计的?以这种方式设计它达到了什么效率?
解决方案
源文档实际上是“存储”在_source
字段中(但未编入索引),源文档的所有字段均已编入索引(但未存储)。通常可以_source
使用源过滤从字段中检索所有字段值。这是默认配置 ES 的方式,但您可以随意更改它。
例如,您可以决定根本不存储_source
文档,而只存储文档的某些字段。例如,如果您的文档有一个包含大量文本的字段,这可能是一个好主意。存储它可能不明智,_source
因为这将占用大量空间。那个巨大的文本块可能只对全文搜索有用,因此只需要被索引,而所有其他字段可能也需要被索引和存储,因为它们需要被检索才能显示。
所以底线是:
- 如果一个字段可以被搜索到,它就不需要存储,它只需要被索引
- 如果可以检索字段,则可以将其配置为存储或从
_source
字段中检索/过滤(默认情况下存储)
推荐阅读
- c++ - 使用ARGO命令行解析器:未知选项在选项后面的选项后未返回
- c++ - Arduino:格式不正确的json
- fpga - 如何在将位文件刷入fpga后可以读取位文件中的配置名称?
- python - 访问容器中的数据库
- javascript - 等待异步或承诺返回
- python - 如何使用批处理为大型数据集拟合 Keras ImageDataGenerator
- mysql - MySQL 语句中的哪些列属性可以在 CREATE TABLE / ALTER TABLE 语句中指定?
- ionic-framework - 如何从离子搜索栏获取输入?
- javascript - 如何在 symfony 中反序列化查询序列化表单
- android - 了解newrelic响应时间