Vector Search Basics¶
이 예제는 AkasicDB vector 인덱스를 만들기 전에 SQL ordering이 어떻게 동작하는지 보여줍니다. 같은 query vector로 Squared L2 distance, negative dot product, cosine distance를 비교합니다.
DROP TABLE IF EXISTS akasicdb_example_articles_minimal;
CREATE TABLE akasicdb_example_articles_minimal (
id integer PRIMARY KEY,
title text NOT NULL,
embedding vector(3) NOT NULL
);
INSERT INTO akasicdb_example_articles_minimal (id, title, embedding) VALUES
(1, 'vector indexes overview', ARRAY[1.0, 0.0, 0.0]::real[]::vector),
(2, 'nearest neighbor search', ARRAY[0.9, 0.1, 0.0]::real[]::vector),
(3, 'query tuning notes', ARRAY[0.7, 0.2, 0.0]::real[]::vector),
(4, 'graph traversal basics', ARRAY[0.0, 1.0, 0.0]::real[]::vector),
(5, 'storage operations', ARRAY[0.0, 0.0, 1.0]::real[]::vector),
(6, 'release checklist', ARRAY[-1.0, 0.0, 0.0]::real[]::vector),
(7, 'hybrid application notes', ARRAY[0.4, 0.4, 0.4]::real[]::vector);
SELECT id, title, embedding <-> ARRAY[1.0, 0.0, 0.0]::real[]::vector AS l2_distance
FROM akasicdb_example_articles_minimal
ORDER BY embedding <-> ARRAY[1.0, 0.0, 0.0]::real[]::vector
LIMIT 3;
SELECT id, title, embedding <#> ARRAY[1.0, 0.0, 0.0]::real[]::vector AS negative_dot
FROM akasicdb_example_articles_minimal
ORDER BY embedding <#> ARRAY[1.0, 0.0, 0.0]::real[]::vector
LIMIT 3;
SELECT id, title, embedding <=> ARRAY[1.0, 0.0, 0.0]::real[]::vector AS cosine_distance
FROM akasicdb_example_articles_minimal
ORDER BY embedding <=> ARRAY[1.0, 0.0, 0.0]::real[]::vector
LIMIT 3;
SELECT count(*) AS vector_index_count
FROM vectoron_index_stat
WHERE tablename = 'akasicdb_example_articles_minimal';
Operators¶
| Operator | 계산 기준 | 정렬 방향 |
|---|---|---|
<-> |
Squared L2 distance | distance 오름차순 |
<#> |
Negative dot product | dot product 내림차순 |
<=> |
Cosine distance | distance 오름차순 |
마지막 query는 vectoron_index_stat을 확인합니다. 값이 0이면 이 table에는 AkasicDB vector 인덱스가 없다는 뜻입니다.