Elastic paging 처리

개발새발·2022년 1월 16일
0

elasticsearch

목록 보기
9/54

1. Pagination

우리가 알고 있는 일반적인 페이지네이션과 같다. 기본적으로 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
}

2. Search-After(권장)

페이지 번호가 없고 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"
  ]
}

3. Point in Time

유저가 특정시간동안 같은 버전의 인덱스를 볼 수 있게 한다.

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

4. Scroll API

쿼리에 맞는 많은 양의 문서를 사용해야할 때 사용할 수 있다. 무한 스크롤을 구현하는데에는 사용하면 안된다.

# 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

profile
발새발개

1개의 댓글

comment-user-thumbnail
2022년 2월 4일

오.. 1번 방법만 썼었는데 유용해요!!

답글 달기