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와 결합하면 하이브리드 검색도 만들 수 있어요.