엘라스틱서치는 용량보다는 성능때문에 클러스터링을 한다. 각 노드가 하나의 서버(프로세스)라고 했을때(하나의 서버 안에 여러개의 노드가 있을 수도 있다고 한다), 해당 노드들의 컨테이너를 샤드라고 한다(노드 안에 샤드가 있다). 데이터의 저장 단위는 인덱스인데 이 인덱스를 쪼갠 것을 샤드라고 한다. 샤드는 각 노드에 분산저장된다.
조회는 모든 샤드에서 수행하고 from + size 크기의 결과를 가져와서 정렬하는데(전체 조회 돼야하지 않나?), 처음에는 점수와 id만 가지고 정렬한다. 이후 정렬 된 값 기반으로 검색 결과를 요청한다. 따라서 랭킹알고리즘이 중요한데, 보통은 TF/IDF, BM25 요즘은 Beats가 추가됐다고 한다.
역색인이기 때문에 조회 이외의 동작은 속도가 느리다. 따라서 json 문서들을 모아 둔 세그먼트라는 단위를 만들고 이는 불변으로 만들어서 update가 불가능하게 만들어 놓는다. 즉 insert와 delete만 가능하다. delete한 것도 바로 삭제하지 않고 마크를 해놓은 뒤 나중에 지운다.
알고리즘
AWS 강의듣기
s3 이용
Powered with by Gatsby 2.0