Skip to content

Commit 53e97f9

Browse files
committed
翻译扫描和滚屏一节
1 parent e19889e commit 53e97f9

File tree

3 files changed

+63
-3
lines changed

3 files changed

+63
-3
lines changed

060_Distributed_Search/15_Search_options.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ ___dfs_query_then_fetch___ 和 ___dfs_query_and_fetch___
7171
7272
___scan(扫描)___
7373
74-
`scan(扫描)`搜索类型是和`scroll(滚动)`API连在一起使用,使得可以高效地取回巨大数量的结果。它是通过禁用排序来实现的。我们将在下一节_scan-and-scroll(扫描和滚动)_里讨论它。
74+
`scan(扫描)`搜索类型是和`scroll(滚屏)`API连在一起使用的,可以高效地取回巨大数量的结果。它是通过禁用排序来实现的。我们将在下一节_scan-and-scroll(扫描和滚屏)_里讨论它。
7575
7676
7777

060_Distributed_Search/20_Scan_and_scroll.md

+59
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,61 @@
1+
##扫描和滚屏
2+
3+
`scan(扫描)`搜索类型是和`scroll(滚屏)`API一起使用来从Elasticsearch里高效地取回巨大数量的结果而不需要付出深分页的代价。
4+
5+
___scroll(滚屏)___
6+
7+
一个滚屏搜索允许我们做一个初始阶段搜索并且持续批量从Elasticsearch里拉取结果直到没有结果剩下。这有点像传统数据库里的_cursors(游标)_
8+
9+
滚屏搜索会及时制作快照。这个快照不会包含任何在初始阶段搜索请求后对index做的修改。它通过将旧的数据文件保存在手边,所以可以保护index的样子看起来像搜索开始时的样子。
10+
11+
12+
13+
___scan(扫描)___
14+
15+
深度分页代价最高的部分是对结果的全局排序,但如果禁用排序,就能以很低的代价获得全部返回结果。为达成这个目的,可以采用`scan(扫描)`搜索模式。扫描模式让Elasticsearch不排序,只要分片里还有结果可以返回,就返回一批结果。
16+
17+
为了使用_scan-and-scroll(扫描和滚屏)_,需要执行一个搜索请求,将`search_type` 设置成`scan`,并且传递一个`scroll`参数来告诉Elasticsearch滚屏应该持续多长时间。
18+
19+
20+
``` js
21+
GET /old_index/_search?search_type=scan&scroll=1m (1)
22+
{
23+
"query": { "match_all": {}},
24+
"size": 1000
25+
}
26+
```
27+
(1)保持滚屏开启1分钟。
28+
29+
这个请求的应答没有包含任何命中的结果,但是包含了一个Base-64编码的`_scroll_id(滚屏id)`字符串。现在我们可以将`_scroll_id` 传递给`_search/scroll`末端来获取第一批结果:
30+
31+
``` js
32+
GET /_search/scroll?scroll=1m (1)
33+
c2Nhbjs1OzExODpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExOTpRNV9aY1VyUVM4U0 <2>
34+
NMd2pjWlJ3YWlBOzExNjpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExNzpRNV9aY1Vy
35+
UVM4U0NMd2pjWlJ3YWlBOzEyMDpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzE7dG90YW
36+
xfaGl0czoxOw==
37+
```
38+
--------------------------------------------------
39+
(1) 保持滚屏开启另一分钟。
40+
41+
(2) `_scroll_id` 可以在body或者URL里传递,也可以被当做查询参数传递。
42+
43+
注意,要再次指定`?scroll=1m`。滚屏的终止时间会在我们每次执行滚屏请求时刷新,所以他只需要给我们足够的时间来处理当前批次的结果而不是所有的匹配查询的document。
44+
45+
这个滚屏请求的应答包含了第一批次的结果。虽然指定了一个1000的`size` ,但是获得了更多的document。当扫描时,`size`被应用到每一个分片上,所以我们在每个批次里最多或获得`size * number_of_primary_shards(size*主分片数)`个document。
46+
47+
> ####注意:
48+
49+
> 滚屏请求也会返回一个_新_的`_scroll_id`。每次做下一个滚屏请求时,必须传递前一次请求返回的`_scroll_id`
50+
51+
如果没有更多的命中结果返回,就处理完了所有的命中匹配的document。
52+
53+
> ####提示:
54+
55+
> 一些[Elasticsearch官方客户端](http://www.elasticsearch.org/guide)提供扫描和滚屏的小助手。小助手可以提供对这个功能的简单封装。
56+
57+
58+
<!--
159
[[scan-scroll]]
260
=== scan and scroll
361
@@ -79,3 +137,4 @@ TIP: Some of the http://www.elasticsearch.org/guide[official Elasticsearch clien
79137
provide _scan-and-scroll_ helpers that provide an easy wrapper around this
80138
functionality.((("clients", "providing scan-and-scroll helpers")))
81139
140+
-->

SUMMARY.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
* [查询阶段](060_Distributed_Search/05_Query_phase.md)
7171
* [取回阶段](060_Distributed_Search/10_Fetch_phase.md)
7272
* [搜索选项](060_Distributed_Search/15_Search_options.md)
73-
* [扫描和滚动](060_Distributed_Search/20_Scan_and_scroll.md)
73+
* [扫描和滚屏](060_Distributed_Search/20_Scan_and_scroll.md)
7474
* [索引管理](070_Index_Mgmt/00_Intro.md)
7575
* [创建删除](070_Index_Mgmt/05_Create_Delete.md)
7676
* [设置](070_Index_Mgmt/10_Settings.md)
@@ -108,4 +108,5 @@
108108
* [布尔匹配](100_Full_Text_Search/20_How_match_uses_bool.md)
109109
* [增加子句](100_Full_Text_Search/25_Boosting_clauses.md)
110110
* [控制分析](100_Full_Text_Search/30_Controlling_analysis.md)
111-
* [关联失效](100_Full_Text_Search/35_Relevance_is_broken.md)
111+
* [关联失效](100_Full_Text_Search/35_Relevance_is_broken.md)
112+

0 commit comments

Comments
 (0)