--- title: "Rollup 搜索最大数量配置" date: 2026-01-07 lastmod: 2026-01-07 description: "rollup.search.max_count 配置项用于控制 Rollup 搜索时的最大任务数量。" tags: ["Rollup", "搜索", "查询限制"] summary: "配置项作用 # rollup.search.max_count 配置项用于控制Rollup 搜索时的最大任务数量。 该配置定义了在执行 Rollup 搜索时最多可以搜索多少个 Rollup 任务,用于限制搜索范围,防止查询过多的 Rollup 索引导致性能问题。 配置项属性 # 配置路径: rollup.search.max_count 数据类型: Integer(整数) 默认值: 2 是否可选: 是 作用域: NodeScope(节点级别) 动态更新: 是(可以动态更新,无需重启) 配置项详解 # 工作机制 # 最大搜索数量控制 搜索请求处理: ├── 识别查询涉及的 Rollup 任务 ├── 任务数量 > max_count? │ ├── 是 → 只搜索前 max_count 个任务 ⚠️ │ └── 否 → 搜索所有匹配任务 ✅ └── 执行搜索 max_count = 2 示例: 场景 1: 匹配 3 个任务 ├── 任务列表: [job1, job2, job3] ├── max_count: 2 ├── 实际搜索: [job1, job2] └── job3 被跳过 ⚠️ 场景 2: 匹配 1 个任务 ├── 任务列表: [job1] ├── max_count: 2 ├── 实际搜索: [job1] └── 全部搜索 ✅ 任务匹配逻辑 # Rollup 任务匹配 查询请求: POST /metrics-*/_search { "aggs": { "avg_cpu": { "avg": { "field": "cpu" } } } } │ ├── 查找匹配的 Rollup 任务 │ ├── 检查任务索引模式 │ ├── 检查任务字段 │ └── 检查聚合类型 │ ├── 匹配结果: │ ├── job_hourly (匹配) │ ├── job_daily (匹配) │ ├── job_weekly (匹配) │ └── 共 3 个任务 │ ├── 应用 max_count │ ├── max_count = 2 │ └── 只取前 2 个 │ └── 执行搜索: ├── job_hourly ✅ └── job_daily ✅ 与 search_all_jobs 配合 # 配合 search_all_jobs 使用 search_all_jobs: false + max_count: 2 ├── 只搜索匹配的任务 ├── 最多搜索 2 个 └── 可能遗漏部分任务 search_all_jobs: true + max_count: 2 ├── 搜索所有任务 ├── 最多搜索 2 个 └── 仍然受 max_count 限制 推荐配置: ├── search_all_jobs: false ├── max_count: 5-10 └── 根据实际任务数量调整 配置建议 # 默认配置 # rollup: search: max_count: 2 # 默认值 建议: 适用于 Rollup 任务较少的场景。" --- ## 配置项作用 `rollup.search.max_count` 配置项用于控制**Rollup 搜索时的最大任务数量**。 该配置定义了在执行 Rollup 搜索时最多可以搜索多少个 Rollup 任务,用于限制搜索范围,防止查询过多的 Rollup 索引导致性能问题。 ## 配置项属性 - **配置路径**: `rollup.search.max_count` - **数据类型**: `Integer`(整数) - **默认值**: `2` - **是否可选**: 是 - **作用域**: NodeScope(节点级别) - **动态更新**: 是(可以动态更新,无需重启) ## 配置项详解 ## 工作机制 ``` 最大搜索数量控制 搜索请求处理: ├── 识别查询涉及的 Rollup 任务 ├── 任务数量 > max_count? │ ├── 是 → 只搜索前 max_count 个任务 ⚠️ │ └── 否 → 搜索所有匹配任务 ✅ └── 执行搜索 max_count = 2 示例: 场景 1: 匹配 3 个任务 ├── 任务列表: [job1, job2, job3] ├── max_count: 2 ├── 实际搜索: [job1, job2] └── job3 被跳过 ⚠️ 场景 2: 匹配 1 个任务 ├── 任务列表: [job1] ├── max_count: 2 ├── 实际搜索: [job1] └── 全部搜索 ✅ ``` ## 任务匹配逻辑 ``` Rollup 任务匹配 查询请求: POST /metrics-*/_search { "aggs": { "avg_cpu": { "avg": { "field": "cpu" } } } } │ ├── 查找匹配的 Rollup 任务 │ ├── 检查任务索引模式 │ ├── 检查任务字段 │ └── 检查聚合类型 │ ├── 匹配结果: │ ├── job_hourly (匹配) │ ├── job_daily (匹配) │ ├── job_weekly (匹配) │ └── 共 3 个任务 │ ├── 应用 max_count │ ├── max_count = 2 │ └── 只取前 2 个 │ └── 执行搜索: ├── job_hourly ✅ └── job_daily ✅ ``` ## 与 search_all_jobs 配合 ``` 配合 search_all_jobs 使用 search_all_jobs: false + max_count: 2 ├── 只搜索匹配的任务 ├── 最多搜索 2 个 └── 可能遗漏部分任务 search_all_jobs: true + max_count: 2 ├── 搜索所有任务 ├── 最多搜索 2 个 └── 仍然受 max_count 限制 推荐配置: ├── search_all_jobs: false ├── max_count: 5-10 └── 根据实际任务数量调整 ``` ## 配置建议 ## 默认配置 ```yaml rollup: search: max_count: 2 # 默认值 ``` **建议**: 适用于 Rollup 任务较少的场景。 ## 多任务环境 ```yaml rollup: search: max_count: 10 # 增加限制 ``` **建议**: 有多个 Rollup 任务时使用。 ## 少量任务 ```yaml rollup: search: max_count: 1 # 减少限制 ``` **建议**: 只有 1-2 个 Rollup 任务时使用。 ## 动态更新 ```json PUT /_cluster/settings { "transient": { "rollup.search.max_count": 5 } } ``` ## 代码示例 ## 基础配置 ```yaml rollup: search: max_count: 2 ``` ## 完整 Rollup 搜索配置 ```yaml rollup: search: enabled: true max_count: 5 search_all_jobs: false backoff_count: 5 backoff_millis: 1000 ``` ## 高性能场景 ```yaml rollup: search: enabled: true max_count: 3 search_all_jobs: false ``` **建议**: 性能敏感场景限制搜索数量。 ## 兼容性场景 ```yaml rollup: search: enabled: true max_count: 10 search_all_jobs: true ``` **建议**: 需要覆盖所有任务时使用。 ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `search.max_count` | 最大搜索数量 | 2 | | `search.enabled` | 搜索功能开关 | false | | `search.search_all_jobs` | 搜索所有任务 | false | ## 注意事项 1. **默认值**: 默认值为 `2`,适用于大多数场景。 2. **动态更新**: 支持动态更新。 3. **任务限制**: 超过限制的任务将被忽略。 4. **性能影响**: 数值越大,查询可能越慢。 5. **合理设置**: 根据实际 Rollup 任务数量设置。 6. **数据完整性**: 设置过小可能导致数据不完整。 7. **监控建议**: 监控被跳过的任务数量。 8. **测试验证**: 调整后验证查询结果完整性。 9. **优先级**: 任务按匹配顺序选择,优先选择前面的任务。 10. **配置调整**: 根据 Rollup 任务数量变化动态调整。