搜索设置
可以设置以下专家设置来管理全局搜索和聚合限制。
indices.query.bool.max_clause_count-
在 8.0.0 中已弃用
此已弃用的设置无效。
(Static, integer) Elasticsearch 现在将使用基于搜索线程池大小和分配给 JVM 的堆大小的启发式方法,动态设置查询中允许的最大子句数。此限制的最小值为 1024,并且在大多数情况下会更大(例如,具有 30GB RAM 和 48 个 CPU 的节点的最大子句数约为 27,000)。更大的堆会导致更高的值,而更大的线程池会导致更低的值。
尽可能避免使用包含大量子句的查询。如果您之前为了适应繁重的查询而调高了此设置,则可能需要增加 Elasticsearch 可用的内存量,或者减小搜索线程池的大小,以便为每个并发搜索提供更多内存。
在早期版本的 Lucene 中,您可以通过将布尔查询相互嵌套来绕过此限制,但现在的限制是基于整个查询中的叶子查询总数,这种变通方法将不再起作用。
search.aggs.only_allowed_metric_scripts-
(Dynamic, boolean) 配置是否只能在脚本化指标聚合中使用显式允许的脚本。默认为
false。使用未包含在
search.aggs.allowed_inline_metric_scripts或search.aggs.allowed_stored_metric_scripts中的脚本的请求将返回错误。
search.aggs.allowed_inline_metric_scripts-
(Dynamic, list of strings) 当
search.aggs.only_allowed_metric_scripts设置为true时,可用于脚本化指标聚合的内联脚本列表。默认为空列表。使用其他内联脚本的请求将返回错误。
search.aggs.allowed_stored_metric_scripts-
(Dynamic, list of strings) 当
search.aggs.only_allowed_metric_scripts设置为true时,可用于脚本化指标聚合的已存储脚本的 ID 列表。默认为空列表。使用其他已存储脚本的请求将返回错误。
indices.query.bool.max_nested_depth-
(Static, integer) 查询的最大嵌套深度。默认为
30。此设置限制查询的嵌套深度。过深的查询嵌套可能会导致栈溢出错误。
支持以下搜索设置
search.aggs.rewrite_to_filter_by_filter
搜索任务看门狗(watchdog)监视长时间运行的搜索任务,并在超出阈值时记录热线程。这通过在搜索仍在运行时捕获线程活动来帮助诊断慢搜索,而不仅仅是在完成后记录日志。
在数据节点上,当分片级搜索操作(查询/获取阶段)超过数据节点阈值时,看门狗会记录热线程。在协调节点上,它仅在长时间运行的协调搜索任务没有未完成的分片子请求时才记录热线程。这避免了当协调节点单纯在等待慢分片时产生冗余日志,因为慢分片会记录其自身的热线程。
热线程输出经过 gzip 压缩和 base64 编码。要对其进行解码,请使用
echo "<base64-data>" | base64 --decode | gzip --decompress
如果输出跨越多个日志行,请先将它们连接起来。
search.task_watchdog.enabled- (Dynamic, boolean) 启用或禁用搜索任务看门狗。默认为
false。
search.task_watchdog.coordinator_threshold- (Dynamic, 时间值) 协调任务的阈值。当协调节点上的搜索任务超过此持续时间且没有未完成的分片子请求时,将记录热线程。设置为
-1ms可禁用协调任务监视。默认为3s。