📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

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": {} }
}

系统会使用以下两者中的较小值作为实际保留时间:

  1. 用户请求中的 keep_alive 参数值
  2. 集群配置的 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.max_keep_alive: 12h

推荐设置建议 #

生产环境建议:根据实际业务需求和存储容量设置

推荐配置:

# 通用场景: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 配合使用

行为示例 #

# 场景: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 错误