이 페이지에서는 PostgreSQL용 AlloyDB의 필터링된 벡터 검색을 간략하게 설명합니다.
필터링된 벡터 검색은 검색 벡터와 특정 필드의 필터로 구성됩니다. AlloyDB는 PostgreSQL의 풍부한 쿼리 기능을 사용하므로 단일 SQL 인터페이스에서 벡터 검색을 실행하고 정형 및 비정형 데이터를 모두 쿼리할 수 있습니다.
필터링 옵션
AlloyDB 쿼리 최적화 도구는 벡터 검색에 가장 효율적인 필터링 전략을 결정하는 데 중요한 역할을 합니다.
쿼리 최적화 도구는 다양한 실행 계획의 비용을 추정하기 위해 쿼리를 분석하고 필터 선택도, 데이터 분포, 색인 가용성과 같은 요소를 고려합니다.
최적화 도구는 비용 추정치를 기반으로 다음 중에서 최적의 필터링 전략을 선택합니다.
사전 필터링
사전 필터링은 AlloyDB가 전체 데이터 세트를 검색하는 대신 필터를 사용하여 기준과 일치하는 더 작은 항목 그룹을 찾는 쿼리 최적화 전략입니다. 그런 다음 AlloyDB는 이 소규모 그룹에 대해 벡터 검색을 실행합니다.
예를 들어 비슷한 파란색 셔츠를 찾는 경우 AlloyDB는 먼저 모든 파란색 셔츠를 찾은 다음 해당 그룹 내에서 유사한 항목을 검색합니다.
이 전략은 계산 집약적인 벡터 유사성 검색을 축소된 데이터 세트에서 실행하므로 성능이 향상됩니다.
후 필터링
후처리 필터링은 필터로 결과를 크게 좁히지 못할 때 AlloyDB에서 사용하는 전략입니다. AlloyDB는 먼저 필터링하는 대신 벡터 검색을 기반으로 유사한 항목의 광범위한 목록을 찾는 것으로 시작합니다. 그런 다음 결과를 필터 조건과 대조하여 최종 목록을 생성합니다.
예를 들어 유사한 영화를 검색할 때 genre = drama
와 같이 매우 광범위한 필터를 사용하는 경우 AlloyDB는 먼저 검색어와 유사한 대량의 영화를 찾은 다음 장르별로 필터링합니다. 대부분의 영화가 드라마일 수 있기 때문입니다.
이 전략은 필터와 일치하는 결과가 많은 경우에 효율적입니다.
인라인 필터링
인라인 필터링은 AlloyDB가 벡터와 다른 보조 색인을 모두 사용하여 벡터 검색과 필터 평가를 동시에 실행하는 쿼리 최적화 전략입니다. AlloyDB는 벡터 색인을 검색하여 유사한 벡터를 찾고, 각 벡터가 메타데이터 필터 조건과 일치하는지 확인합니다. 이를 위해 B-트리, GIN, GiST와 같은 색인을 활용하여 이러한 조건을 빠르게 평가합니다.
예를 들어 비슷한 신발을 검색하고 color = black
로 필터링하는 경우 인라인 필터링은 AlloyDB가 이미 검은색인 신발의 유사성만 확인함을 의미합니다. 이는 모든 신발의 유사성을 확인한 다음 색상으로 필터링하거나 모든 신발을 색상으로 필터링한 다음 유사성을 확인하는 것보다 효율적입니다.
인라인 필터링은 필터로 결과 범위를 적당히 좁힐 때 유용합니다.
쿼리 계획 이해
쿼리 계획은 쿼리 실행 프로세스에 대한 포괄적인 보기를 제공하며 실행 전략 필드에서 AlloyDB가 벡터 스캔 작업에 선택한 필터링 전략을 보여줍니다.
인라인 필터링을 위한 쿼리 계획
인라인 필터링의 경우 AlloyDB는 비트맵 색인 스캔 계획 노드를 사용하여 필터 절의 비트맵을 제공하는 벡터 스캔이라고도 하는 맞춤 스캔 계획 노드를 사용합니다.
벡터 스캔은 필터 기준을 충족하는 행의 거리만 계산합니다.
다음 쿼리는 color = black
로 필터링된 shoes
검색의 인라인 필터링을 보여줍니다.
EXPLAIN
SELECT *
FROM products
WHERE color = 'black'
ORDER BY embedding <=> embedding('text-embedding-005', 'shoes')::vector
LIMIT 10;
다음 쿼리 계획 예는 인라인 필터링을 사용한 최적화된 벡터 검색을 보여줍니다.
Limit (actual rows=10)
-> Custom Scan (vector scan) on products
Execution Strategy: Bitmap assisted vector Scan on products_embedding_index
Order By: (embedding <=> '[...]')::vector)
Limit: 10
-> Bitmap Index Scan on products (color_index)
Index Cond: (color = 'black')
쿼리 계획 예시에서 Limit (actual rows=10)
은 쿼리가 SQL LIMIT 10;
절을 사용하여 출력을 제한했음을 나타냅니다. actual rows=10
은 이 노드가 쿼리 실행 중에 10개의 행을 반환했음을 의미합니다.
-> Custom Scan (vector scan) on products
노드는 벡터 검색 작업을 나타냅니다. 이는 벡터 데이터를 위한 특수 스캔이며 products
테이블에서 작동하므로 맞춤 스캔입니다.
인라인 필터링의 쿼리 계획 예시에서는 실행 전략 필드에 Bitmap assisted vector Scan on products_embedding_index
가 표시됩니다. 이는 벡터 스캔이 비트맵을 사용하여 유사성 검색을 실행해야 하는 행의 선택 목록을 만든다는 것을 나타냅니다. 비트맵 색인 스캔은 color = 'black'
조건을 기반으로 데이터를 필터링하는 데 사용됩니다.
Order By: (embedding <=> '[...]')::vector
속성은 (embedding <=> '[...]')::vector
표현식을 사용하여 계산된 벡터 유사성을 기반으로 결과가 정렬됨을 나타냅니다. 여기서 embedding
는 벡터 열을 참조하고, <=>
는 가장 가까운 이웃 연산자를 나타내며, [...]
는 쿼리 벡터이고, ::vector
는 벡터 데이터 유형으로 형변환을 실행합니다.
-> Bitmap Index Scan on products (color_index)
노드는 colors_index
의 비트맵 색인 스캔을 나타냅니다. 비트맵 색인 스캔은 비트맵을 사용하여 필터 조건과 일치하는 행을 선택하고 필터링에 color_index
를 사용합니다.
Index Cond: (color = 'black')
속성은 쿼리의 WHERE
절에서 color = 'black'
색인 스캔에 사용되는 필터 조건을 지정합니다.