Cách cuộn Dữ liệu bằng Scroll API đàn hồi
tôi mới làm quen với nai sừng tấm
Tôi đã thử từ điều này nhưng không nhận được luồng hoạt động ..
ví dụ được thực thi bên dưới truy vấn tìm kiếm
POST <index-name>/_search?scroll=2m
{
"query": {"match_all": {}}
}
- và nhận được scroll_id từ truy vấn này, sau đó thử Truy xuất loạt kết quả tiếp theo cho tìm kiếm cuộn. sử dụng điều này
GET /_search/scroll
{
"scroll_id" : "<scroll_id>"
}
- có kết quả lần đầu tiên
"took" : 2,
"timed_out" : false,
"terminated_early" : true,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 13059,
"relation" : "eq"
}
- câu hỏi của tôi là tại sao tôi lại gặp lỗi khi thử cuộn lại bằng cùng scroll_id
"caused_by" : {
"type" : "search_context_missing_exception",
"reason" : "No search context found for id"
- Các phiên bản được sử dụng
Kibana 7.9.3
Elastic Search 7.9.3
Trả lời
Các scroll_idgiá trị thay đổi trong mỗi phản ứng. Vì vậy, cuộc gọi tìm kiếm tiếp theo cần sử dụng id cuộn mới từ phản hồi tìm kiếm trước đó.
Bạn đã bắt đầu đúng với
POST <index-name>/_search?scroll=2m
{
"query": {"match_all": {}}
}
Trong phản hồi bạn nhận được, một trường được gọi _scroll_idchứa id cuộn tiếp theo để sử dụng cho lần gọi tiếp theo (như con trỏ), hãy gọi nó là scroll_id_1:
GET /_search/scroll
{
"scroll_id" : "<scroll_id_1>",
"scroll": "2m"
}
Trong phản hồi tiếp theo đó, bạn nhận được một _scroll_idgiá trị mới (chúng ta hãy gọi nó scroll_id_2) mà bạn cần sử dụng nó cho lần gọi tiếp theo:
GET /_search/scroll
{
"scroll_id" : "<scroll_id_2>",
"scroll": "2m"
}
Và bạn tiếp tục làm điều đó cho đến khi bạn nhận được một tập hợp kết quả trống, lúc đó bạn có thể xóa ngữ cảnh tìm kiếm
DELETE /_search/scroll
{
"scroll_id" : "<scroll_id_n>"
}