Basic Example - Vector

이 예제에서는 AkasicDB 확장을 로드하고, 카테고리 필터를 적용한 벡터 유사도 검색까지의 전체 워크플로우를 보여줍니다.

1. 확장 로드

CREATE EXTENSION IF NOT EXISTS akasicdb;

SELECT akasicdb_admin.initialize();
  • AkasicDB의 모든 타입과 함수를 데이터베이스에 등록합니다.
  • 이 과정은 관리자 권한을 가진 계정으로만 수행할 수 있습니다.

2. 테이블 생성

CREATE TABLE items (
  id       bigserial PRIMARY KEY,
  name     text,
  category text,
  embedding vector(3) NOT NULL
);
  • category 컬럼 추가로 필터링 예제를 구현합니다.
  • 임베딩은 3차원 벡터(vector(3)) 타입을 사용합니다.

3. 튜토리얼 데이터 생성

INSERT INTO items (name, category, embedding)
SELECT
  'item_' || i,
  (ARRAY['fruit','vegetable','grain'])[floor(random()*3)::int+1],
  ARRAY[random(), random(), random()]::real[]
FROM generate_series(1,100) AS s(i);
  • 임의의 레코드를 100개를 생성합니다.
  • 카테고리는 fruit, vegetable, grain 중 무작위로 지정됩니다.
  • 임베딩은 임의의 3차원 벡터값으로 생성됩니다.

4. HNSW 인덱스 생성

CREATE INDEX ON items USING vectoron (embedding vector_l2_ops);
  • 이 예제에서는 기본 HNSW 알고리즘을 사용합니다.
  • 인덱스를 생성한 것으로 인해 벡터 검색 시 빠른 근접 이웃 탐색을 지원합니다.

5. 벡터 유사도 검색

-- 탐색 깊이 설정
SET vectoron.hnsw_ef_search = 64;

-- 'fruit' 카테고리 내 상위 2개 검색
SELECT
  id,
  name,
  category,
  embedding <-> '[0.15,0.15,0.35]'::vector AS distance
FROM items
WHERE category = 'fruit'
ORDER BY distance
LIMIT 2;
  • vectoron.hnsw_ef_search으로 검색 품질(Recall)을 조절할 수 있습니다.
  • category = 'fruit' 조건으로 fruit 카테고리만 검색합니다.
  • <-> 연산자로 제곱 유클리드 거리 기준으로 질의 결과를 정렬합니다.

이 과정을 통해 AkasicDB에서 벡터 검색과 RDBMS 필터링을 결합하는 방법을 쉽게 이해할 수 있습니다.


This site uses Just the Docs, a documentation theme for Jekyll.