회사에서 진행하는 온보딩중에 elastic search 교육과정이 있다. 앞으로 공부하며 궁금했던 점들을 직접 찾아보며 익히고, 블로그에 기록해두려고 한다~ 많관부👋🏼
검색 요청이 인덱스/다중 인덱스에서 실행될때, 각 샤드들은 검색을 로컬에서 실행하고 난뒤 결과를 coordinating node로 반환한다. coordinating 노드는 결과를 수집하여 global 결과 집합으로 만들어낸다.
이 과정 속에서 샤드레벨의 요청에 대한 로컬 응답값은 각 샤드의 local cache로 저장된다.
이 local cache는 샤드내 문서의 변화가 생기는 순간(refresh) 무효화 된다. -> 즉, shard reqest cache는 변화가 거의 없는 정적인 데이터의 캐시 환경에서 사용하는 것이 좋다.
특징
size:0일때 캐시된다.hits 결과는 캐싱하지 않지만, hits.total은 캐싱한다.활성화 및 설정 방법
⠀PUT index_01/_settings
{
"index.requests.cache.enable": "true"
}
⠀PUT index_01/_search?request_cache=true
{
"size": 0,
"aggs": {
"animal": {
"terms": {
"field": "species"
}
}
}
}
elasticsearch.yml에서 설정할 수 있다.indices.requests.cache.size: JVM Heap의 몇 %를 캐시 공간으로 사용할지 설정 (default: 1%)es에서는 빈번하게 요청되는 filter query의 응답속도를 개선하기 위해서 cache를 사용하고, 이때 사용되는 캐시가 node query cache이다.
이는 문서 자체를 캐싱하는 것이 아니라 응답값(true/false)형태만 bitset 형태로 캐싱한다.
때문에 score 계산이 필요한 query, aggs는 node query cache가 적용되지 않는다.
filter qeury만 캐싱된다활성화 및 설정방법
활성화 및 캐시 사이즈 설정은 Elasticsearch Cluster내의 모든 데이터 노드에 적용해야 하며 elasticsearch.yml에서 설정할 수 있다.