--- title: "异步搜索结果最大保留时间" date: 2026-01-04 lastmod: 2026-01-04 description: "控制异步搜索结果在集群中存储的最长时间限制的配置项说明" tags: ["异步搜索", "数据保留", "资源管理"] summary: "配置项作用 # async_search.max_keep_alive 配置项限制异步搜索结果在集群中存储的最长时间。该配置项是 keep_alive 参数的上限,用于防止异步搜索结果占用过多存储空间。 配置项类型 # 该配置项为动态配置,可以在运行时通过集群更新 API 进行修改,无需重启节点。 默认值 # 5d(5天) 是否必需 # 可选配置项 取值范围 # 正数时间值(如 1h、2d、7d 等) 工作原理 # 当用户提交异步搜索请求时,可以指定 keep_alive 参数来控制结果的保留时间: POST /my-index/_async_search?keep_alive=1h { "query": { "match_all": {} } } 系统会使用以下两者中的较小值作为实际保留时间: 用户请求中的 keep_alive 参数值 集群配置的 async_search.max_keep_alive 值 如果用户指定的 keep_alive 超过此限制,系统将自动将其截断为配置的最大值。 使用示例 # # 默认配置(5天) async_search.max_keep_alive: 5d # 缩短保留时间(1天) async_search.max_keep_alive: 1d # 延长保留时间(30天) async_search.max_keep_alive: 30d # 设置为12小时 async_search." --- ## 配置项作用 `async_search.max_keep_alive` 配置项限制异步搜索结果在集群中存储的最长时间。该配置项是 `keep_alive` 参数的上限,用于防止异步搜索结果占用过多存储空间。 ## 配置项类型 该配置项为**动态配置**,可以在运行时通过集群更新 API 进行修改,无需重启节点。 ## 默认值 ``` 5d(5天) ``` ## 是否必需 **可选配置项** ## 取值范围 ``` 正数时间值(如 1h、2d、7d 等) ``` ## 工作原理 当用户提交异步搜索请求时,可以指定 `keep_alive` 参数来控制结果的保留时间: ```bash POST /my-index/_async_search?keep_alive=1h { "query": { "match_all": {} } } ``` 系统会使用以下两者中的较小值作为实际保留时间: 1. 用户请求中的 `keep_alive` 参数值 2. 集群配置的 `async_search.max_keep_alive` 值 如果用户指定的 `keep_alive` 超过此限制,系统将自动将其截断为配置的最大值。 ## 使用示例 ```yaml # 默认配置(5天) async_search.max_keep_alive: 5d # 缩短保留时间(1天) async_search.max_keep_alive: 1d # 延长保留时间(30天) async_search.max_keep_alive: 30d # 设置为12小时 async_search.max_keep_alive: 12h ``` ## 推荐设置建议 **生产环境建议**:根据实际业务需求和存储容量设置 **推荐配置:** ```yaml # 通用场景:1-3天 async_search.max_keep_alive: 2d # 大数据量场景:1天以内 async_search.max_keep_alive: 1d # 长期分析场景:7天以内 async_search.max_keep_alive: 7d ``` **设置考虑因素:** 1. **存储容量**:异步搜索结果存储在 `.async-search` 系统索引中,会占用磁盘空间 2. **业务需求**:用户需要多长时间后获取异步搜索结果 3. **清理策略**:与 `async_search.expired.persisted_response.cleanup_interval` 配合使用 ## 行为示例 ```bash # 场景:async_search.max_keep_alive = 1d # 请求1:keep_alive=30m → 实际保留30分钟 POST /index/_async_search?keep_alive=30m # 请求2:keep_alive=1d → 实际保留1天 POST /index/_async_search?keep_alive=1d # 请求3:keep_alive=7d → 实际保留1天(被限制) POST /index/_async_search?keep_alive=7d ``` ## 相关配置项 | 配置项 | 作用 | 默认值 | |-------|------|-------| | `async_search.expired.persisted_response.cleanup_interval` | 过期结果清理间隔 | 30分钟 | | `async_search.max_search_running_time` | 搜索最大运行时间 | 12小时 | | `async_search.max_wait_for_completion_timeout` | 等待完成超时上限 | 1分钟 | | `async_search.persist_search_failures` | 是否持久化失败结果 | false | ## 注意事项 1. **动态更新**:修改此配置后立即生效,仅影响新提交的异步搜索请求 2. **存储影响**:较大的保留时间会增加 `.async-search` 系统索引的存储需求 3. **与过期清理的关系**:清理任务会删除所有超过 keep_alive 时间的异步搜索结果 4. **系统索引**:异步搜索结果存储在 `.async-search` 系统索引中,需确保有足够的磁盘空间 5. **查询已过期结果**:访问已过期的异步搜索结果会返回 `resource_not_found_exception` 错误