실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
✅ 페이지네이션 (Pagination)
서버의 과부하를 방지하기 위해 데이터 조회 시 필수적으로 적용해야 하는 기능이 페이지네이션(Pagination)이다. Elasticsearch에서 페이지네이션(Pagination)을 활용해 데이터 조회하는 방법을 알아보자.
- 인덱스 생성
DELETE /boards
PUT /boards
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "nori"
},
"likes": { "type": "long" }
}
}
}
- 데이터 생성
POST /boards/_doc
{
"title": "1번 글",
"likes": 12
}
POST /boards/_doc
{
"title": "2번 글",
"likes": 35
}
POST /boards/_doc
{
"title": "3번 글",
"likes": 1
}
POST /boards/_doc
{
"title": "4번 글",
"likes": 11
}
POST /boards/_doc
{
"title": "5번 글",
"likes": 72
}
POST /boards/_doc
{
"title": "6번 글",
"likes": 10
}
POST /boards/_doc
{
"title": "7번 글",
"likes": 5
}
- 페이지네이션 적용시켜서 데이터 불러오기
// 1 페이지
GET /boards/_search
{
"query": {
"match": {
"title": "글"
}
},
"size": 3,
"from": 0
}
// 2 페이지
GET /boards/_search
{
"query": {
"match": {
"title": "글"
}
},
"size": 3,
"from": 3
}
// 3 페이지
GET /boards/_search
{
"query": {
"match": {
"title": "글"
}
},
"size": 3,
"from": 6
}
size : 한 페이지에 불러올 데이터 개수 (SQL문의 LIMIT과 동일)
from : 몇 번째 데이터부터 불러올 지 (SQL문의 OFFSET과 동일, 0부터 시작)from = (페이지 수 - 1) x size
✅ 정렬 (Sorting)
좋아요 수(likes)를 내림차순으로 정렬해보자.
GET /boards/_search
{
"query": {
"match": {
"title": "글"
}
},
"sort": [
{
"likes": {
"order": "desc"
}
}
]
}