검색 결과 페이징

엘라스틱서치는 일반DBMS와 다르게 페이징된 부분만 조회하는 것이 아니라 모든 데이터를 읽은 뒤 필요한 부분만 짤라서 제공한다. 그렇기 때문에 데이터량이 많아지면 쿼리 비용도 증가한다.

# 첫번째 페이지
POST log-2018-12-01/_search
{
    "from": 0,
    "size": 50,
    "query": {
        "term": {
            "message": "ACCESS"
        }
    }
}
 
 
# 두번째 페이지
POST log-2018-12-01/_search
{
    "from": 50,
    "size": 50,
    "query": {
        "term": {
            "message": "ACCESS"
        }
    }
}

쿼리 결과 정렬

sort 파라미터를 이용하면 score에 의한 값이 아닌 필드를 기준으로 정렬을 할수 있다.

POST log-2020-01-01/_search
{
    "query": {
        "term": {
            "message": "ACCESS"
        }
    },
    "sort": [
        { "log_date": "desc" }
    ]
}

스코어가 같은 경우 secondary 정렬을 사용하도록 할수도 있다.

POST log-2020-01-01/_search
{
    "query": {
        "term": {
            "message": "ACCESS"
        }
    },
    "sort": [
        { "log_date": "desc" },
        { "_score": "desc" }
    ]
}

_source 필드 필터링

URI 방식의 검색시 _source_includes 파라미터를 사용하여 특정 _source 필드만 가져올 수 있었는데, Query DSL 에서도 유사하게 설정할수 있다.

POST log-2020-01-01/_search
{
    "query": {
        "term": {
            "message": "ACCESS"
        }
    },
    "_source": [ "log_date", "message" ]
}