이 장에서는 ‘색인된 문서 검색 방법과 이를 위해 제공되는 여러 검색 관련 API 사용 방법’ **에 대해 다룰 예정입니다.
엘라스틱서치는 색인 시점에 Analyzer를 통해 분석된 텀을 Term, 출현빈도, 문서번호 등 역색인 구조로 만들어 내부적으로 저장하고 있습니다.
검색 시점에는 Keyword 타입과 같이 분석이 불가능한 데이터와 분석이 가능한 데이터를 구분하고, 분석이 가능한 경우 Analyzer를 이용해 분석을 수행합니다.
$$ URI\ 검색\ \ vs\ \ Request\ Body\ 검색 $$
Request Body 방식의 검색을 사용해야 합니다.
URI 검색을 이용할 경우 복잡한 질의문을 작성하기 힘들며, 복잡한 질의문을 작성하더라도 가독성이 좋지 않은 단점이 존재하기 때문입니다.
QueryDSL Request Body
{
"size":
"from":
"timeout": // 설정한 소요 시간 내 검색된 데이터만 조회
"_source": {} // 검색 시 필요한 필드만 출력하도록 정의
"query": {}
"aggs": {}
"sort": {}
}
QueryDSL Response Body
{
"took":
"timed_out":
"_shards": {
"total":
"successful":
"failed":
},
"hits": {
"total":
"max_score": // 일치하는 문서의 가장 높은 스코어 값
"hits": [] // 각 문서 정보와 스코어 값
}
}
QueryDSL 쿼리와 필터
어떤 방식을 택하느냐에 따라 검색 과정이나 성능이 크게 다를 수 있기에 용도에 맞게 사용해야 합니다.