针对大数据量的弹性搜索性能相关查询

elastic search performance related queries for large volume of data

我一直在开发一个规模较大的生产系统,我在其中将大量数据编入弹性搜索索引。然后我需要使用特定查询进行搜索。这样做时,我遇到了一些与性能相关的问题。

请将此视为

的后续问题
  1. 因为我曾经 return 使用内部命中的嵌套数据,如果我们有大量嵌套对象 return 从文档中使用 _source 并不是最佳解决方案.那么我们该如何克服呢?我们可以使用文档值字段吗?如果是怎么办?

  2. 阅读默认inner hits size默认为3,所以我们最多可以提供100。假设我们需要return所有的结果,我们如何获取数据不影响性能?

注册大小,

您可以将大小指定为最大,直到它不超过默认限制 from+size 10K,即 index module doc 中指定的 index.max_result_window,尽管您可以更改限制动态但不推荐,如同一 link 中所述,并且有更好的替代方法。

更重要的是,您需要在 inner_hits 上定义大小,这会更加昂贵,而 ES 将其限制为 3 的全部原因,而在正常查询中,默认大小限制为 10。

即将doc_values,

您可以这样做,而不是从 _source 中获取值,只要您使用的是默认启用的字段,例如 keyword 字段,但对于 text 字段,它默认情况下未启用,您必须先启用它,它有以下缺点:

  1. 您需要更改索引映射并重新索引所有内容
  2. 您的索引中需要更多 space。
  3. 它在文本字段上的成本非常高,这就是它被禁用和更多信息的原因 on this official doc
  4. 您已经在 _source 上获得了此信息,出于性能原因,最好使用它。