针对大数据量的弹性搜索性能相关查询
elastic search performance related queries for large volume of data
我一直在开发一个规模较大的生产系统,我在其中将大量数据编入弹性搜索索引。然后我需要使用特定查询进行搜索。这样做时,我遇到了一些与性能相关的问题。
请将此视为
的后续问题
因为我曾经 return 使用内部命中的嵌套数据,如果我们有大量嵌套对象 return 从文档中使用 _source 并不是最佳解决方案.那么我们该如何克服呢?我们可以使用文档值字段吗?如果是怎么办?
阅读默认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
字段,它默认情况下未启用,您必须先启用它,它有以下缺点:
- 您需要更改索引映射并重新索引所有内容
- 您的索引中需要更多 space。
- 它在文本字段上的成本非常高,这就是它被禁用和更多信息的原因 on this official doc
- 您已经在
_source
上获得了此信息,出于性能原因,最好使用它。
我一直在开发一个规模较大的生产系统,我在其中将大量数据编入弹性搜索索引。然后我需要使用特定查询进行搜索。这样做时,我遇到了一些与性能相关的问题。
请将此视为
因为我曾经 return 使用内部命中的嵌套数据,如果我们有大量嵌套对象 return 从文档中使用 _source 并不是最佳解决方案.那么我们该如何克服呢?我们可以使用文档值字段吗?如果是怎么办?
阅读默认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
字段,它默认情况下未启用,您必须先启用它,它有以下缺点:
- 您需要更改索引映射并重新索引所有内容
- 您的索引中需要更多 space。
- 它在文本字段上的成本非常高,这就是它被禁用和更多信息的原因 on this official doc
- 您已经在
_source
上获得了此信息,出于性能原因,最好使用它。