Skip to content
SON BLOG
Go back

Qdrant Hybrid Queries — 다중 벡터 검색과 Fusion 전략

Edit page

Qdrant는 복수의 벡터 표현(named vectors)을 가진 포인트를 효율적으로 검색하고 결합할 수 있도록 다양한 검색 전략을 지원한다.

단일 쿼리를 넘어서 다단계 검색, 유사도 기반 순위 조정, 비즈니스 로직을 반영한 점수 보정까지 가능한 Query API는 강력하고 유연한 벡터 검색 인터페이스를 제공한다.

1. Hybrid Search (하이브리드 검색)

개요

다양한 임베딩 표현을 동시에 사용하는 경우, 각 표현으로 수행한 검색 결과를 하나로 융합하는 것이 하이브리드 검색의 핵심이다. 예를 들어, dense vector와 sparse vector를 각각 검색한 뒤 이를 결합할 수 있다.

융합 방식

예시: dense + sparse 벡터 융합

POST /collections/{collection_name}/points/query
{
  "prefetch": [
    {
      "query": {
        "indices": [1, 42],
        "values": [0.22, 0.8]
      },
      "using": "sparse",
      "limit": 20
    },
    {
      "query": [0.01, 0.45, 0.67, ...],
      "using": "dense",
      "limit": 20
    }
  ],
  "query": { "fusion": "rrf" },
  "limit": 10
}

2. Multi-Stage Query (다단계 검색)

개요

정확도가 높은 고차원 벡터를 사용하는 것은 비용이 크기 때문에, 빠른 검색용 벡터로 후보군을 추출한 뒤, 고정밀 벡터로 재정렬하는 방식이 유효하다.

구성 예시

POST /collections/{collection_name}/points/query
{
  "prefetch": {
    "query": [1, 23, 45, 67],
    "using": "mrl_byte",
    "limit": 1000
  },
  "query": [0.01, 0.299, 0.45, 0.67, ...],
  "using": "full",
  "limit": 10
}

또는 다단계로 중첩된 prefetch도 가능하다.

"prefetch": {
  "prefetch": {
    "query": [1, 23, 45, 67],
    "using": "mrl_byte",
    "limit": 1000
  },
  "query": [0.01, 0.45, 0.67, ...],
  "using": "full",
  "limit": 100
}

3. Score Boosting (점수 보정)

개요

기계 학습 기반의 벡터 유사도만으로는 도메인 특성이나 비즈니스 우선순위를 반영하기 어려운 경우가 많다. Qdrant는 벡터 기반 점수에 조건 기반 점수를 합산하거나 가중치를 부여할 수 있는 formula 기반 score boosting을 제공한다.

예시: 콘텐츠 유형에 따라 점수 가중치 조정

"query": {
  "formula": {
    "sum": [
      "$score",
      {
        "mult": [0.5, { "key": "tag", "match": { "any": ["h1", "h2", "h3"] } }]
      },
      {
        "mult": [0.25, { "key": "tag", "match": { "any": ["p", "li"] } }]
      }
    ]
  }
}

예시: 사용자 위치 기반 점수 보정

"query": {
  "formula": {
    "sum": [
      "$score",
      {
        "gauss_decay": {
          "x": {
            "geo_distance": {
              "origin": { "lat": 52.504043, "lon": 13.393236 },
              "to": "geo.location"
            }
          },
          "scale": 5000
        }
      }
    ]
  },
  "defaults": {
    "geo.location": { "lat": 48.137154, "lon": 11.576124 }
  }
}

지원 연산자 요약

연산자설명
$scoreprefetch에서 계산된 유사도 점수
keypayload 키 참조
sum, mult, div, pow수치 연산
geo_distance두 지리 좌표 간 거리 계산
gauss_decay, lin_decay, exp_decay거리 기반 점수 감소 함수
datetime, datetime key날짜 기반 정렬 또는 점수화

4. Grouping (결과 그룹화)

같은 항목에 대해 다수의 포인트가 존재할 경우, 이를 그룹화하여 중복을 줄이고 대표 결과만 보여줄 수 있다.

POST /collections/{collection_name}/points/query/groups
{
  "query": [1.1],
  "group_by": "document_id",
  "limit": 4,
  "group_size": 2
}

결론

Qdrant는 복수 벡터 기반 검색 환경에서 단순한 유사도 비교를 넘어서 검색 융합, 다단계 최적화, 조건 기반 점수 조정, 그룹화 등 고도화된 검색 로직을 구축할 수 있도록 풍부한 기능을 제공한다. 이를 통해 검색 품질 향상, 성능 최적화, 비즈니스 목적에 부합하는 정렬 및 추천이 가능해진다.

이러한 고급 기능은 특히 하이브리드 검색 시스템, MRL 기반 검색, 사용자 맞춤형 추천 시스템, 복합 조건 검색에서 큰 효과를 발휘할 수 있다.


Edit page
Share this post:

Previous Post
Qdrant Filtering — Payload 기반 필터링 조건과 구문 가이드
Next Post
Qdrant Indexing — 벡터 인덱스와 페이로드 인덱스 구성 가이드