源过滤和elasticsearch get API中的fields选项有什么区别?

时间:2015-03-02 08:41:56

标签: elasticsearch

我在弹性搜索中source filtering(即使用_source_include参数)和GET API的fields选项之间感到困惑。它们在性能方面有何不同?他们什么时候应该被使用?

3 个答案:

答案 0 :(得分:2)

更新:re:fields

请注意,如果您将来到这里,这是1.x文档。

  

为了向后兼容,如果fields参数指定了未存储的字段(存储映射设置为false),它将加载_source并从中提取它。此功能已被source filtering参数替换。

     

- https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-request-fields.html#search-request-fields


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

返回的字段,请参阅source filetring