벡터 검색

복합 벡터 인덱스를 사용한 필터링된 ANN 검색(3부)

이 게시물은 Couchbase의 복합 벡터 인덱싱을 살펴보는 여러 부분으로 구성된 시리즈 중 세 번째 파트입니다. 이전 포스팅을 놓치셨다면 다음 포스팅도 놓치지 마세요. 1부 그리고 파트 2.

이 시리즈에서 다룰 내용입니다:

  1. 개념, 용어, 개발자의 동기 부여 등 복합 벡터 인덱스가 중요한 이유에 대해 알아보세요. 스마트 식료품 추천 시스템을 실행 예제로 사용합니다.
  2. 카우치베이스 인덱싱 서비스 내에서 복합 벡터 인덱스가 구현되는 방식입니다.
  3. 복합 벡터 쿼리에서 ORDER BY 푸시다운이 작동하는 방식입니다.
  4. 실제 성능 동작 및 벤치마킹 결과.

 

푸시다운 기준 주문 - 복합 벡터 인덱스

음식 또는 식료품 앱의 기능을 상상해 보겠습니다:

“누텔라 같은 맛의 초콜릿 스프레드를 추천하며, 고단백질, 저당질 순으로 영양 성분이 높은 순으로 추천합니다.”

이는 단순한 필터링 그 이상입니다.

결합이 필요합니다:

  • 의미적 유사성(맛/질감)
  • 영양 필터링(당분 및 단백질)
  • 맞춤형 주문 전략

해당 SQL++ 쿼리는 다음과 같습니다:

이 단일 쿼리는 우리가 원하는 모든 것을 표현합니다:

  • 더 건강한 초콜릿 스프레드
  • 누텔라에 가장 가까운 맛의 의미
  • 고단백질 선호
  • 다음 설탕 줄이기
  • 사용자에게 상위 10개만 표시

이제 Couchbase가 이를 매우 효율적으로 실행하는 방법에 대해 자세히 알아보겠습니다.

  1. 스칼라 필터가 푸시 다운됨
    1. 스칼라 술어는 복합 벡터 인덱스를 사용하여 인라인으로 평가됩니다.
      1. sugars_100g < 20
      2. 단백질_100g > 10
    2. approx_vector_distance(...) Couchbase의 ANN(가장 가까운 이웃) 스캔 파이프라인을 활성화합니다.
    3. 벡터 인덱스는 쿼리 임베딩에 가장 가까운 임베딩(이 예에서는 누텔라)을 가진 항목을 찾습니다.
    4. 내부 작업에 대해서는 이 블로그 시리즈의 2부를 참조하세요.
  2. 푸시다운으로 제한 및 주문하기
    1. 바로 이 지점에서 Couchbase의 효율성이 탁월해집니다.
    2. 쿼리에 다음이 포함된 경우:
      1. LIMIT
    3. 카우치베이스는 두 가지를 모두 푸시할 수 있습니다. LIMIT 그리고 주문 기준 를 인덱스 서비스에 추가합니다.
    4. 이렇게 하면 대량의 중간 결과 집합을 쿼리 서비스로 보내지 않아도 됩니다.

스칼라 및 ANN을 사용한 푸시다운 기준 주문의 작동 방식은 다음과 같습니다.

  1. 인덱서가 연결된 정렬 키를 빌드합니다.
    1. 복합 벡터 인덱스 스캔을 수행하는 동안 인덱서는 각 후보 항목에 대한 복합 정렬 키를 구성합니다.
    2. 연결된 복합 정렬 키는 다음으로 구성됩니다:
      1. 벡터 키 대신 ANN 거리
      2. 스칼라 주문 기준 필드에 정확한 주문 기준 시퀀스:
        1. 단백질_100g (DESC)
          1. 내림차순을 위해 음수 또는 인코딩됨
        2. sugars_100g (ASC)
    3. 이렇게 하면 사전적으로 비슷한 키가 생성됩니다:
      1. (거리, -단백질_100g, 당류_100g)
    4. 벡터 필드를 교체하는 이유는 무엇인가요?
      1. 주문의 경우 거리가 벡터 자체가 아니라 관심 있는 실제 스칼라 값이 되기 때문입니다.
      2. 이렇게 하면 인덱서가 후보를 정렬할 수 있습니다.
  2. 인덱서는 상위 K 항목만 유지 관리
    1. 인덱서가 ANN 후보를 스캔할 때, K 크기의 우선순위 힙을 유지합니다(K = 제한).
    2. 각 후보는 연결된 키를 사용하여 평가됩니다.
    3. 힙이 크기 K를 초과하면 가장 나쁜 항목이 퇴거됩니다.
    4. 마지막에는 상단 LIMIT 항목이 남아 있습니다.

 

즉,

  • 대규모 결과 세트가 생성되지 않습니다.
  • 쿼리 노드에서 전체 정렬이 수행되지 않습니다.
  • ANN + 스칼라 랭킹 + LIMIT가 모두 한 곳에서 이루어집니다.
  • 인덱서는 상위 10개 항목만 쿼리 서비스로 스트리밍합니다.

결과가 쿼리 노드에 도달할 때쯤이면 이미 쿼리가 완료된 상태입니다:

  • 필터링됨
  • 의미론적 순서
  • 스칼라 주문
  • 제한으로 잘라내기

쿼리 노드에는 할 일이 거의 남아 있지 않습니다.
이것은 하이브리드 시맨틱 + 스칼라 랭킹을 위한 Couchbase에서 가능한 가장 빠른 실행 경로입니다.

스칼라와 벡터를 주문 기준으로 혼합하는 유연성

  • 카우치베이스의 종합 벡터 인덱스의 가장 강력한 측면 중 하나는 개발자가 단일 순위 전략에 얽매이지 않는다는 점입니다. 
  • “벡터 거리로만” 정렬하도록 강제하는 많은 벡터 데이터베이스와 달리, Couchbase에서는 단일 ORDER BY 절 내에서 스칼라 필드와 벡터 유사성 측정값을 자유롭게 혼합, 재정렬, 순열할 수 있습니다.

다음은 누텔라 같은 음식 검색에 대한 네 가지 의미 있는 주문 순열입니다.

  1. 시맨틱 우선(맛 유사성 우위)

    1. 사용 사례: “누텔라 같은” 맛이 순위를 지배하기를 원합니다.

  1. 단백질 우선(건강한 선택이 우선)

    1. 사용 사례: 영양이 맛보다 우선시되는 피트니스 중심 애플리케이션에 적합합니다.

      1. 사용 사례: 당뇨병 환자에게 적합한 검색 또는 당분 저감 식단.설탕 우선(사용자가 다른 무엇보다도 낮은 설탕을 원함)

    1. 복잡한 하이브리드 순위
      1. 사용 사례: 시맨틱 폴백 및 동점자를 사용한 상태 우선 검색.

 

개발자를 위한 마지막 팁

      • 카우치베이스는 ANN 유사도, 스칼라 필터링, 사용자 지정 ORDER BY, LIMIT 푸시다운을 복합 벡터 인덱스 내부에서 직접 결합합니다.
      • 이를 통해 빠르고 우아한 단일 SQL++ 쿼리를 사용하여 영양에 최적화된 누텔라 맛 추천과 같은 실제 지능형 검색 기능을 구축할 수 있습니다.
      • 카우치베이스는 단순히 인덱스에 벡터만 저장하는 것이 아닙니다. 벡터를 효율적으로 쿼리하고 대규모로 구조화된 데이터와 결합할 수 있습니다.
이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 사이 코마라주

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.