Typesense 벡터 검색

Typesense 벡터 검색

Typesense는 전통적인 키워드 검색과 함께 벡터 유사도 검색도 지원해요. 임베딩 모델로 만든 벡터를 도큐먼트 필드로 저장해 두고, 쿼리 벡터와의 거리(코사인 유사도 등)로 가까운 결과를 찾는 방식이에요. 시맨틱 검색이나 추천 시스템에서 주로 써요.

출처: https://typesense.org/docs/0.25.1/vector-search.html

벡터 필드 정의

컬렉션 스키마에서 벡터 필드는 float[] 타입으로 선언하고, 벡터 차원을 정확히 알아야 해요.

{
  "name": "movie_embeddings",
  "fields": [
    {"name": "movie_title", "type": "string"},
    {"name": "embedding", "type": "float[]", "embed": {"from": ["movie_title"], "model_config": {"model_name": "ts/all-MiniLM-L12-v2"}}}
  ]
}

embed 옵션을 쓰면 Typesense가 지정한 모델(model_name)로 해당 필드에서 벡터를 자동 생성해요. 이 경우 from에 지정한 필드들에서 임베딩을 뽑아 저장해요.

벡터 검색

벡터 검색은 vector_query 파라미터로 해요. 임베딩 자동 생성 방식을 쓴다면 쿼리 텍스트만 넘겨도 되고, 직접 만든 벡터를 넘기거나 도큐먼트 ID를 기준으로 검색할 수도 있어요.

curl 'http://localhost:8108/collections/movie_embeddings/documents/search' \
  -H 'X-TYPESENSE-API-KEY: xyz' \
  -d '{
    "q": "*",
    "vector_query": "embedding:([0.12, -0.05, 0.47, ...])"
  }'

vector_query의 형식은 embedding:([벡터값들])이고, 반환 개수는 k 파라미터로 정해요.

하이브리드 검색

키워드 검색과 벡터 검색을 함께 쓰는 하이브리드 검색도 지원해요. q로 키워드 검색을, vector_query로 벡터 검색을 동시에 지정하면 두 결과를 합쳐 관련도 높은 순으로 돌려줘요.

curl 'http://localhost:8108/collections/movie_embeddings/documents/search' \
  -H 'X-TYPESENSE-API-KEY: xyz' \
  -d '{
    "q": "space sci-fi",
    "query_by": "movie_title",
    "vector_query": "embedding:([0.12, -0.05, 0.47, ...])"
  }'

Typesense는 벡터 인덱스로 HNSW를 사용하고, 거리 메트릭은 코사인·유클리드·내적 중 선택할 수 있어요.

더 알아보기