반응형
Elasticsearch를 사용하면서 Scroll Search API 를 사용하게 되어 정리해보려고 합니다.
#기존 DB
LIMIT 0, 100
LIMIT 100, 100
LIMIT 200, 100
#Elasticsearch
from : 0, size : 100
from : 100, size : 100
from : 200, size : 100
기존 DB에서는 cursor가 존재해서 위와 같이 LIMIT 절을 추가하면 다른 값을 받아 볼 수 있습니다.
하지만 Elasticsearch는 from, size를 추가해도 같은 값이 나오는 이유는 한 페이지를 리턴하고 나면 search context가 소멸되기 때문입니다.
search context를 존재하게 해주는 기능을 하는 게 Scroll Search API입니다.
(RDBMS의 cursor)
#1 Scroll Search Example
처음 scroll=10m 파라미터를 추가해서 조회를 하면 기존 조회 값과 _scroll_id 값도 받을 수 있습니다.
scroll 파라미터를 이용하여 search context를 얼마나(10m) 살아있게 해 주는지 정해줍니다.
여기서 _scroll_id 값이 search context 값을 가리킵니다.
GET /product_info/_search?scroll=10m
{
"size" : 10,
"query" : {
"term" : {
"categorySeq" : 1
}
}
}
결과값
{
_scroll_id:DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAGLvFlQ2ZldFT3NvUzhha1ZrMm5RZjlITHcAAAAAAABi8BZUNmZXRU9zb1M4YWtWazJuUWY5SEx3,
took:16,
timed_out:false,
_shards:{
total:2,
successful:2,
skipped:0,
failed:0
},
hits:{
total:187456,
max_score:1.0,
hits:[{
_index:issue-v0.1.3,
_type:doc,
_id:131544,
_score:1.0,
_source:{
productCode : KAFC121
}
},{
_index:issue-v0.1.3,
_type:doc,
_id:184522,
_score:1.0,
_source:{
productCode : KAFC122
}
},...,{
_index:issue-v0.1.3,
_type:doc,
_id:8953,
_score:1.0,
_source:{
productCode : KAFC129
}
},{
_index:issue-v0.1.3,
_type:doc,
_id:8955,
_score:1.0,
_source:{
productCode : KAFC130
}
}
]}
}
#2 Scroll Search Example
GET /_search/scroll
{
"scroll" : "10m"
"_scroll_id" : "DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAGLvFlQ2ZldFT3NvUzhha1ZrMm5RZjlITHcAAAAAAABi8BZUNmZXRU9zb1M4YWtWazJuUWY5SEx3"
}
#3 Scroll Search Example
GET /_search/scroll
{
"scroll" : "10m"
"_scroll_id" : "DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAGLvFlQ2ZldFT3NvUzhha1ZrMm5RZjlITHcAAAAAAABi8BZUNmZXRU9zb1M4YWtWazJuUWY5SEx3"
}
#4 Scroll 제거
DELETE /_search/scroll
{
"_scroll_id" : "DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAGLvFlQ2ZldFT3NvUzhha1ZrMm5RZjlITHcAAAAAAABi8BZUNmZXRU9zb1M4YWtWazJuUWY5SEx3"
}
<참조>
반응형
'ELK' 카테고리의 다른 글
Elasticsearch nori plugin 사용해보기 (0) | 2022.07.27 |
---|---|
Elasticsearch Index Lifecycle Management (ILM) 사용해 보기 (0) | 2022.07.19 |
Elasticsearch Ingest Node PipeLine 사용해 보기 (0) | 2022.07.19 |
Elasticsearch Analyzer 분석 (0) | 2022.07.18 |
Elasticsearch 개념 및 용어 (0) | 2021.07.07 |