← 학습 카테고리

Learn

Elasticsearch

50개 모듈 · 현재 9번째

Elasticsearch 모듈 9/50 elasticsearch-learn-09

벡터 검색과 kNN — HNSW 근사 최근접 이웃

Elasticsearch 벡터 검색(kNN/HNSW) 및 클러스터 운영(상태·스냅샷) 공식 문서 종합 (웹 리서치, 2026) — Elastic 공식 문서(dense-vector, knn, cluster-health, red-yellow-cluster-status) 종합 Elastic 공식 문서 dense-vector, kNN search 가이드

이 모듈을 다 읽으면

  • 정확 kNN과 근사 kNN(ANN)의 트레이드오프를 설명할 수 있다
  • HNSW가 왜 대규모 벡터 검색에서 브루트포스보다 빠른지 개념적으로 설명할 수 있다
  • elasticsearch-learn-01/02에서 다룬 역인덱스 기반 검색과 벡터 검색이 근본적으로 다른 문제를 푼다는 것을 판단할 수 있다

elasticsearch-learn-02의 역인덱스+BM25(키워드 매칭)와 대비되는, 의미적 유사도를 다루는 벡터 검색(dense_vector, kNN, HNSW)의 핵심 개념을 정리한다.

역인덱스 검색과 벡터 검색은 다른 문제를 푼다

elasticsearch-learn-02에서 다룬 역인덱스+BM25는 '검색어와 같은/유사한 단어가 등장하는 문서'를 찾는다 — 어휘적(lexical) 매칭이다. 벡터 검색은 텍스트/이미지 등을 임베딩 모델로 고차원 숫자 벡터(예: 768차원)로 변환해 저장해두고, 쿼리도 같은 방식으로 벡터화한 뒤 '벡터 공간에서 가장 가까운 문서'를 찾는다 — 단어가 겹치지 않아도 의미가 비슷하면 찾아낸다(예: '자동차'로 검색해도 '승용차'가 언급된 문서를 찾음). dense_vector 필드 타입에 이 임베딩 벡터를 저장한다.

핵심 포인트

  • 역인덱스+BM25 = 어휘적 매칭(단어가 겹쳐야 함), 벡터 검색 = 의미적 유사도(단어가 달라도 의미가 비슷하면 매칭)
  • dense_vector 필드 타입에 임베딩 벡터를 저장하고, 쿼리 벡터와의 거리로 유사도를 계산한다

정확(exact) kNN vs 근사(approximate) kNN

정확 kNN(script_score 쿼리로 구현)은 쿼리 벡터와 인덱스의 모든 벡터 사이 거리를 전부 계산해 진짜 최근접 이웃을 찾는다 — 결과는 100% 정확하지만 문서 수가 늘어날수록 계산량이 선형으로 늘어 대규모 데이터에서는 느리다. 근사 kNN(ANN, knn 검색 옵션/쿼리)은 HNSW(Hierarchical Navigable Small World) 같은 그래프 기반 인덱스 구조를 미리 만들어둬서, 전체를 다 비교하지 않고도 '거의 확실히 가까운' 이웃들을 빠르게 찾아낸다 — 정확도를 약간 희생하는 대신(대략 상위 10개 중 9개 이상을 실제로 찾아내는 수준의 recall) 속도는 수십~수백 배 빨라진다. 대규모 프로덕션에서는 거의 항상 근사 kNN을 쓴다.

핵심 포인트

  • 정확 kNN(script_score): 100% 정확하지만 데이터가 크면 느림(전수 비교)
  • 근사 kNN(HNSW 기반): 약간의 정확도(recall)를 희생하고 수십~수백 배 빠름 — 대규모 프로덕션의 표준 선택

양자화(Quantization) — 메모리 절약을 위한 트레이드오프

고차원 벡터를 원본 정밀도(float32) 그대로 저장하면 메모리 사용량이 매우 커진다. int8/bfloat16 같은 양자화 기법은 벡터 값을 더 적은 비트로 압축 저장해 메모리 사용량을 크게 줄이면서도 유사도 계산 정확도는 크게 훼손하지 않도록 설계된다. 최신 버전에서는 고차원 벡터(384차원 이상)에 대해 이런 양자화된 HNSW 인덱스를 기본으로 쓰는 방향으로 발전하고 있다 — 벡터 검색을 대규모로 운영할 때는 정확도-메모리 트레이드오프를 이해하고 양자화 옵션을 검토하는 것이 실무적으로 중요하다.

핵심 포인트

  • 양자화(int8/bfloat16 등)는 벡터를 더 적은 비트로 압축 저장해 메모리를 절약하되 정확도를 약간 희생하는 기법
  • 대규모 벡터 검색 운영에서는 정확도-메모리 트레이드오프 검토가 실무적으로 중요