이 페이지에서는 벡터 검색과 Spanner에서 작동하는 방식을 설명합니다.
벡터 검색은 고차원 벡터 데이터에 대한 시맨틱 검색 및 유사성 일치를 지원하는 고성능의 내장 기능입니다. 트랜잭션 데이터베이스 내에 직접 벡터 임베딩을 저장하고 색싱함으로써 Spanner는 별도의 벡터 데이터베이스와 복잡한 ETL 파이프라인이 필요하지 않습니다.
주요 개념
이 섹션에서는 벡터 검색의 다음 주요 개념을 소개합니다.
- 벡터 임베딩
- 검색 방법 (KNN 및 ANN)
- 거리 함수
벡터 임베딩
벡터 임베딩은 비정형 데이터의 고차원 수치 표현입니다. 머신러닝 모델을 사용하여 비정형 데이터에서 생성됩니다. 예를 들어 Vertex AI 텍스트 임베딩 API를 사용하여 Spanner에 저장된 데이터의 텍스트 임베딩을 생성, 저장, 업데이트할 수 있습니다.
검색 방법
Spanner는 유사한 벡터를 찾는 두 가지 방법을 지원합니다.
K-최근접 이웃 (KNN): 쿼리와 데이터 세트의 모든 벡터 간 거리를 계산하여 정확한 검색을 실행합니다. 더 정확한 재현율을 제공하지만 대규모 데이터 세트의 경우 계산 비용이 많이 듭니다.
근사 최근접 이웃 (ANN): 벡터 색인 (Google의 ScaNN 알고리즘 기반)을 사용하여 많은 벡터에서 빠르게 일치 항목을 찾습니다. 속도와 확장성을 높이기 위해 정확성 (재현율)을 약간 포기합니다.
주요 기능
확장성: 파티셔닝되지 않은 ANN 검색의 경우 수십억 개의 벡터를 지원하고, 파티셔닝된 KNN 워크로드의 경우 수조 개의 벡터를 지원합니다.
통합 AI 데이터베이스 및 엔진: GoogleSQL
ML.PREDICT또는 PostgreSQLspanner.ML_PREDICT_ROW함수를 사용하여 쿼리 흐름 내에서 직접 Vertex AI 모델에서 임베딩을 생성합니다.인라인 필터링: 성능 저하 없이 벡터 검색과 구조화된 메타데이터 필터 (예: '카테고리가 '신발'이고 가격이 100 미만인 유사한 이미지 찾기')를 효율적으로 결합합니다.
LangChain 통합: LangChain 기본 지원을 통해 Spanner를 벡터 저장소로 사용하여 검색 증강 생성 (RAG) 애플리케이션을 빌드할 수 있습니다.
하이브리드 검색 기능
벡터 검색은 Spanner의 다른 데이터 기능과 결합할 때 가장 강력합니다.
| 조합 | 이점 |
|---|---|
| SQL 필터링을 사용한 벡터 검색 | 벡터 검색과 필터를 효율적으로 결합합니다 (예: '카테고리가 '신발'이고 가격이 100 미만인 유사한 이미지 찾기'). |
| 벡터 검색 + 전체 텍스트 검색 | 상호 순위 융합 (RRF)을 사용하여 시맨틱 유사성과 키워드 정확성을 결합하여 검색 관련성을 높입니다. |
| 벡터 + 그래프 | 벡터 검색을 사용하여 속성 그래프에서 관련 진입점 (노드)을 찾은 다음 복잡한 관계를 탐색합니다. |
다음 단계
- Spanner AI에 대해 자세히 알아보세요.
- Vertex AI 텍스트 임베딩을 가져오는 방법을 자세히 알아보세요.
- K-최근접 이웃 (KNN) 검색을 수행하는 방법을 자세히 알아보세요.
- 근사 최근접 이웃 (ANN) 검색을 수행하는 방법 자세히 알아보기