在某些情况下,存储字段是有意义的。例如,如果您有一个包含标题、日期和非常大的内容字段的文档,您可能只想检索标题和日期,而不必从大的 _source 字段中提取这些字段
stored_fields 参数是关于在映射中显式标记为存储的字段,默认情况下是关闭的,通常不推荐使用。改为使用源过滤来选择要返回的原始源文档的子集。
所有支持 doc 值的字段都默认启用它们。
示例 1
我有title(短字符串)和content(> 1MB)的文档。我想搜索匹配的标题,并返回标题。
- 使用源过滤
GET /_search
{ _source: "obj.title", ... }
- 使用存储字段
GET /_search
{ _source: false, stored_fields: ["title"], ... }
- 带有文档值
GET /_search
{_source: false, stored_fields: "_none_", docvalue_fields: "title", ... }
可以,然后呢
- 源过滤请求会
_source从磁盘读取完整的标题和内容,然后应用过滤器并仅返回标题,还是弹性搜索仅从磁盘读取标题? - 源过滤请求会使用文档值吗?
- 存储字段是存储分析的标记还是原始值?
- 存储的字段或文档值是否比 _source 效率更高或更低?