Skip to content

Commit 920cd88

Browse files
committed
update refresh
1 parent 6ae1894 commit 920cd88

File tree

3 files changed

+69
-2
lines changed

3 files changed

+69
-2
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ npm run docs:dev
917917
- :heavy_check_mark: 重索引 API [:link:](https://elasticsearch.bookhub.tech/rest_apis/document_apis/reindex)
918918
- :heavy_check_mark: 词向量 API [:link:](https://elasticsearch.bookhub.tech/rest_apis/document_apis/termvectors)
919919
- :heavy_check_mark: 多词向量 API [:link:](https://elasticsearch.bookhub.tech/rest_apis/document_apis/multi_termvectors)
920-
- ?refresh
920+
- :heavy_check_mark: ?refresh [:link:](https://elasticsearch.bookhub.tech/rest_apis/document_apis/refresh)
921921
- Optimistic concurrency control
922922
- Enrich APIs
923923
- Put enrich policy
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# ?refresh
2+
3+
[索引](rest_apis/document_apis/docs_index)[更新](rest_apis/document_apis/update)[删除](rest_apis/document_apis/delete)[批量](rest_apis/document_apis/bulk) API 支持设置 `refresh`,以控制搜索何时可以看到该请求所做的更改。这些是允许的值:
4+
5+
- **空字符串**`true`
6+
7+
在操作发生后立即刷新相关的主分片和副本分片(而不是整个索引),以便更新后的文档立即出现在搜索结果中。**只有**在经过深思熟虑并确认不会导致索引和搜索性能低下的情况下,才可以这样做。
8+
9+
- `wait_for`
10+
11+
在响应之前,等待请求所做的更改通过刷新变得可见。这不会强制立即刷新,而是等待刷新发生。Elasticsearch 会每隔 `index.refresh_interval`(默认值为一秒)自动刷新一次已更改的分片。该设置是[动态的](index_modules/index_module#动态索引设置)。调用[刷新](rest_apis/index_apis/refresh) API 或在任何支持刷新的 API 上将 `refresh` 设置为 `true` 也会导致刷新,进而导致已经在运行的 `refresh=wait_for` 请求返回。
12+
13+
- `false`(默认值)
14+
15+
不采取任何与刷新相关的操作。该请求所做的更改将在请求返回后的某个时间点可见。
16+
17+
## 选用哪个设置
18+
19+
除非你有充分的理由等待更改变得可见,否则请始终使用 `refresh=false`(默认设置)。最简单快捷的选择是从 URL 中省略 `refresh` 参数。
20+
21+
如果绝对必须让请求所做的更改与请求同步可见,则必须在增加 Elasticsearch 负载(`true`)和延长响应等待时间(`wait_for`)之间做出选择。以下几点可以帮助你做出决定:
22+
23+
- 索引更改的次数越多,`wait_for``true` 相比节省的工作量就越多。如果索引每隔一次 `index.refresh_interval` 才更改一次,那么 `wait_for` 不会节省任何工作。
24+
25+
- `true` 会创建效率较低的索引结构(小段),这些小段随后必须合并到效率更高的索引结构(大段)中。也就是说,`true` 的代价是在创建索引时创建小段,在搜索时搜索小段,以及在合并时创建大段。
26+
27+
- 切勿连续启动多个 `refresh=wait_for` 请求。相反,使用 `refresh=wait_for` 将它们批量合并为一个批量请求,Elasticsearch 会并行启动所有请求,并在所有请求都完成后才返回。
28+
29+
- 如果将刷新间隔设为 `-1`,禁用自动刷新,那么使用 `refresh=wait_for` 的请求将无限期等待,直到某个操作导致刷新。相反,将 `index.refresh_interval` 设置为比默认值更短的值,如 `200ms`,会使 `refresh=wait_for` 的刷新速度更快,但仍会产生低效的分段。
30+
31+
- `refresh=wait_for` 只影响它所在的请求,但通过强制立即刷新,`refresh=true` 会影响其他正在进行的请求。通常,如果你有一个正在运行的系统,你不想打扰它,那么 `refresh=wait_for` 是一个较小的修改。
32+
33+
## `refresh=wait_for` 能强制刷新
34+
35+
如果在分片上已经有 `index.max_refresh_listeners`(默认值为 `1000`)请求在等待刷新时,收到了 `refresh=wait_for` 请求,那么该请求的行为将与刷新设置为 `true` 时的行为一样:它将强制刷新。这样做既能保证 `refresh=wait_for` 请求返回时,其变更对搜索是可见的,又能防止被阻塞的请求不经检查而占用资源。如果一个请求因为用完了监听器槽而强制刷新,那么它的响应将包含 `"forced_refresh":true`
36+
37+
无论批量请求修改了多少次分区,它们在每个分区上都只占用一个槽位。
38+
39+
## 示例
40+
41+
这将创建一个文档,并立即刷新索引,使其可见:
42+
43+
```bash
44+
PUT /test/_doc/1?refresh
45+
{"test": "test"}
46+
PUT /test/_doc/2?refresh=true
47+
{"test": "test"}
48+
```
49+
50+
这将创建一个文档,但不会使其在搜索时可见:
51+
52+
```bash
53+
PUT /test/_doc/3
54+
{"test": "test"}
55+
PUT /test/_doc/4?refresh=false
56+
{"test": "test"}
57+
```
58+
59+
这将创建一个文档,并等待它在搜索时可见:
60+
61+
```bash
62+
PUT /test/_doc/4?refresh=wait_for
63+
{"test": "test"}
64+
```
65+
66+
> [原文链接](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-refresh.html)

sidebars.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ const sidebars = {
167167
'rest_apis/document_apis/bulk',
168168
'rest_apis/document_apis/reindex',
169169
'rest_apis/document_apis/termvectors',
170-
'rest_apis/document_apis/multi_termvectors'
170+
'rest_apis/document_apis/multi_termvectors',
171+
'rest_apis/document_apis/refresh'
171172
]
172173
},
173174
{

0 commit comments

Comments
 (0)