我在弹性搜索中source filtering(即使用_source_include参数)和GET API的fields选项之间感到困惑。它们在性能方面有何不同?他们什么时候应该被使用?
答案 0 :(得分:2)
更新:re:fields
请注意,如果您将来到这里,这是1.x文档。
为了向后兼容,如果fields参数指定了未存储的字段(存储映射设置为false),它将加载_source并从中提取它。此功能已被source filtering参数替换。
AFAICT:
_source
告诉elasticsearch是否在响应中包含匹配文档的源。 “源”是插入文档时的数据。
fields
告诉elasticsearch包含 source ,但仅包含已定义的字段。
性能:除非您的Elasticsearch服务器带宽较低,否则可能会忽略不计。
答案 1 :(得分:1)
我有同样的疑问,here我找到了答案。
字段限制内容已解析并返回的字段
_source_filtering 限制返回的字段
另一种看待它的方法是认为 fields 用于优化数据传输和CPU使用,而 _source_filtering 仅优化数据传输
源过滤允许我们控制每次点击返回原始JSON文档的哪些部分[...]值得记住的是,这只会节省我们参与搜索的节点之间的带宽成本以及客户端,而不是CPU或磁盘,就像使用字段时一样。
另外:
关于不常见的字段的一个特征是能够选择元数据字段。特别值得注意的是它能够选择_ttl-field,它实际上返回文档到期之前的毫秒数,而不是文档的原始生命周期。确实是一个非常方便的功能。
答案 2 :(得分:0)
fields
参数仅适用于stored
字段。从2.3文档:
除了索引字段的值外,您还可以选择存储 用于以后检索的原始字段值。拥有Lucene的用户 background使用存储的字段来选择他们想要的字段 能够在他们的搜索结果中返回。实际上是_source字段 是一个存储的字段。在Elasticsearch中,设置单个文档 要存储的字段通常是错误的优化。整体 文档已存储为_source字段。几乎总是这样 最好只使用_source提取所需的字段 参数。
有关如何限制从_source