우리가 알고 있는 일반적인 페이지네이션과 같다. 기본적으로 10개씩 조회된다.
# Pagination
# First request
GET products/_search
{
"query": {
"match": {
"name": "bike"
}
},
"size": 10,
"from": 0
}
# Next request
GET products/_search
{
"query": {
"match": {
"name": "bike"
}
},
"size": 10,
"from": 10
}
페이지 번호가 없고 next 버튼만으로 조절할 때 사용할 수 있다. 무한 스크롤시 사용할 수 있다.
# Search after
# First request
GET products/_search
{
"query": {
"match": {
"name": "bike"
}
},
"size": 10,
"sort": [
{
"_score": "desc"
},
{
"id.keyword": "asc"
}
]
}
# Next request
GET products/_search
{
"query": {
"match": {
"name": "bike"
}
},
"size": 10,
"sort": [
{
"_score": "desc"
},
{
"id.keyword": "asc"
}
],
"search_after": [
0.2876821,
"1"
]
}
유저가 특정시간동안 같은 버전의 인덱스를 볼 수 있게 한다.
# Create PIT for index
POST products/_pit?keep_alive=2m
# First page
GET _search
{
"from": 0,
"size": 10,
"query": {
"match": {
"name": "bike"
}
},
"pit": {
"id": "85ezAwEIcHJvZHVjdHMWSzJZVTdKOU1RLU9SRVBsck43SGg3dwAWS3ptRzhJX3FUZE9iaGVpY3J5VmhTdwAAAAAAAAAABxZVYm5aNWF2U1NqcWJJdXhPc1dyS2hBAAEWSzJZVTdKOU1RLU9SRVBsck43SGg3dwAA",
"keep_alive" : "2m"
}
}
# Following page
GET _search
{
"from": 10,
"size": 10,
"query": {
"match": {
"name": "bike"
}
},
"pit": {
"id": "85ezAwEIcHJvZHVjdHMWSzJZVTdKOU1RLU9SRVBsck43SGg3dwAWS3ptRzhJX3FUZE9iaGVpY3J5VmhTdwAAAAAAAAAABxZVYm5aNWF2U1NqcWJJdXhPc1dyS2hBAAEWSzJZVTdKOU1RLU9SRVBsck43SGg3dwAA",
"keep_alive" : "2m"
}
}
쿼리에 맞는 많은 양의 문서를 사용해야할 때 사용할 수 있다. 무한 스크롤을 구현하는데에는 사용하면 안된다.
# First request
GET products/_search?scroll=1m
{
"size": 10,
"query": {
"match": {
"name": "bike"
}
}
}
# Next request
GET _search/scroll
{
"scroll": "1m",
"scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFlViblo1YXZTU2pxYkl1eE9zV3JLaEEAAAAAAAAAChZLem1HOElfcVRkT2JoZWljcnlWaFN3"
}
참고: https://opster.com/guides/elasticsearch/how-tos/elasticsearch-pagination-techniques/
https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html
오.. 1번 방법만 썼었는데 유용해요!!