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

刷新索引,使自上次刷新以来执行的所有操作对搜索可见。

API #

POST /_refresh
GET /_refresh
POST /{index}/_refresh
GET /{index}/_refresh

API 的作用 #

该 API 用于刷新索引,使最近索引的文档对搜索可见。这是 Easysearch 近实时搜索功能的核心机制。

刷新的作用 #

  • 将内存中的文档写入新的段
  • 使新文档可被搜索
  • 不保证数据持久化到磁盘
  • 默认情况下,Easysearch 会定期自动刷新索引

Refresh vs Flush #

操作描述持久化
Refresh使文档可搜索,写入内存段
Flush将段写入磁盘,清空事务日志

API 的参数 #

路由参数 #

参数类型是否必填描述
{index}字符串要刷新的索引名称。支持:单个索引、逗号分隔的多个索引、通配符表达式、_all(所有索引)

Query String 参数 #

参数类型是否必填默认值描述
expand_wildcards枚举值open通配符展开选项。可选值:openclosedhiddennoneall
ignore_unavailable布尔值false是否忽略不可用的索引
allow_no_indices布尔值false当通配符没有匹配到索引时是否忽略
ignore_throttled布尔值false是否忽略被限流的索引

示例 #

刷新所有索引 #

POST /_refresh

响应示例:

{
  "_shards": {
    "total": 10,
    "successful": 10,
    "failed": 0
  }
}

刷新单个索引 #

POST /my_index/_refresh

刷新多个索引 #

POST /index1,index2/_refresh

使用通配符刷新索引 #

POST /logs-*/_refresh

忽略不存在的索引 #

POST /index1,nonexistent/_refresh?ignore_unavailable=true

只刷新打开的索引(默认) #

POST /*/_refresh?expand_wildcards=open

刷新所有索引(包括关闭的) #

POST /*/_refresh?expand_wildcards=all

响应字段说明 #

字段类型描述
_shards.total整数总分片数
_shards.successful整数成刷新的分片数
_shards.failed整数失败的分片数

自动刷新 #

默认情况下,Easysearch 会每隔 1 秒自动刷新索引。这个间隔可以通过索引设置修改:

PUT /my_index/_settings
{
  "index.refresh_interval": "30s"
}

刷新间隔设置 #

描述
1s默认值,每秒刷新一次
30s每 30 秒刷新一次
-1禁用自动刷新

禁用自动刷新 #

在某些场景下,如批量导入数据,可以临时禁用自动刷新以提高性能:

PUT /my_index/_settings
{
  "index.refresh_interval": "-1"
}

导入完成后,重新启用刷新:

POST /my_index/_refresh
PUT /my_index/_settings
{
  "index.refresh_interval": "1s"
}

使用场景 #

场景 1:批量导入后立即搜索 #

# 禁用自动刷新以提高导入性能
PUT /my_index/_settings
{
  "index.refresh_interval": "-1"
}

# 执行批量导入
POST /_bulk
{ "index": { ... } }
{ ... }
...

# 导入完成后手动刷新
POST /my_index/_refresh

# 重新启用自动刷新
PUT /my_index/_settings
{
  "index.refresh_interval": "1s"
}

场景 2:确保数据可搜索 #

# 索引文档
POST /my_index/_doc/1
{
  "title": "test"
}

# 立即刷新以确保可搜索
POST /my_index/_refresh

# 搜索文档
GET /my_index/_search
{
  "query": {
    "match": {
      "title": "test"
    }
  }
}

性能考虑 #

  1. 频繁刷新:会增加资源消耗和段数量
  2. 批量操作:建议在批量操作期间禁用自动刷新
  3. 段合并:频繁刷新会产生更多小段,需要合并
  4. 搜索延迟:自动刷新间隔越长,搜索可见延迟越大

注意事项 #

  1. Refresh 不等于持久化:刷新只使文档可搜索,不保证数据持久化
  2. 资源消耗:频繁刷新会增加 CPU 和 I/O 负载
  3. 段数量:过多刷新会产生大量小段,影响查询性能
  4. Translog:刷新不会清空事务日志,需要执行 Flush 操作