검색 서비스는 응답 속도가 생명이기 때문에 일정 수준 이상의 응답 속도를 보장해야 한다.

이번 장에서는 검색 성능을 최적화하는 방법에 대해 살펴보자.

1. ElasticSearch 캐시의 종류와 특성

ElasticSearch로 요청되는 검색 쿼리 는 빠른 응답을 주기 위해 해당 쿼리의 결과를 메모리에 저장한다.

결과를 메모리에 저장해 두는 것을 메모리 캐싱 이라고 하며 이때 사용하는 메모리 영역을 캐시 메모리 라고 한다.

다음은 ElasticSearch에서 제공하는 대표적인 캐시 영역의 종류이다.

캐시 영역 설명
Node query cache 쿼리에 의해 각 노드 에 캐싱되는 영역
Shard request cache 쿼리에 의해 각 샤드 에 캐싱되는 영역
Field data cache 쿼리에 의해 필드 를 대상으로 각 노드에 캐싱되는 영역

1.1. Node Query Cache

Node Query Cache는 filter context 에 의해 검색된 문서의 결과가 캐싱되는 영역이다.

<aside> 💡 Filter Context (Term Level Query)

문서에 대한 필터링에 사용되는 쿼리이다. (ex. 일치하는 단어가 있는지, 패턴에 해당하는 값이 있는지, ... )

</aside>

Node Query Cache의 구조

Node Query Cache의 구조

위 그림처럼 사용자가 filter context 로 구성된 쿼리로 검색하면 내부적으로 각 문서에 0과 1로 설정할 수 있는 bitset 을 설정한다.

호출한 적이 있는 문서는 bitset을 1 로 설정하여 사용자가 호출한 적이 있다는 것을 문서에 표시해 둔다.