본문으로 바로가기

Elasticsearch Scroll Search API 조회

category ELK 2021. 7. 14. 23:28
반응형


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"
}

 

<참조>

반응형