Semantic Search 실전·API — Elasticsearch kNN 검색

Semantic Search 실전·API

Elasticsearch는 kNN(최근접 이웃) 검색을 지원해서 대규모 벡터 검색을 직접 다룰 수 있어요. 밀집 벡터 필드에 벡터를 저장하고, kNN 쿼리로 유사 벡터를 찾아요.

벡터 필드와 매핑

PUT /index
{
  "mappings": {
    "properties": {
      "image-vector": {
        "type": "dense_vector",
        "dims": 1024,
        "index": true,
        "similarity": "l2_norm"
      }
    }
  }
}

dense_vector 타입과 dims(차원 수)는 임베딩 모델의 출력 차원과 일치해야 해요. similarity로 거리 함수(l2_norm, cosine, dot_product)를 고를 수 있어요.

kNN 쿼리

POST /index/_search
{
  "query": {
    "knn": {
      "field": "image-vector",
      "query_vector": [0.31, 0.22, 0.11],
      "k": 10,
      "num_candidates": 100
    }
  }
}

k는 반환할 최근접 이웃 수, num_candidates는 각 샤드에서 후보를 얼마나 모을지예요. 실시간 검색 외에 kNN 쿼리를 BM25와 결합하면 하이브리드 검색도 만들 수 있어요.

더 알아보기