Changes between Version 1 and Version 2 of Напредна


Ignore:
Timestamp:
06/14/26 19:27:31 (3 days ago)
Author:
231233
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Напредна

    v1 v2  
    1 xdfsfsgf
     1Петта фаза — Напредна тема: pgvector
     2
     3pgvector е избран затоа што традиционалното пребарување на филмови со LIKE или точно совпаѓање на зборови не е доволно за modern апликации. Со pgvector се овозможува семантичко пребарување — наоѓање на слични филмови врз основа на значење, а не само точни зборови.
     4
     5Системот за кино резервации има потреба од препорака на филмови на корисниците. Наместо да пребарува по жанр или наслов, системот може да препорача филмови кои се семантички слични на она што корисникот го гледал или пребарувал. Ова го подобрува корисничкото искуство и го зголемува бројот на резервации.
     6
     7Го прошируваме модулот за пребарување и препорака на филмови со додавање на vector similarity search во PostgreSQL базата преку pgvector екстензијата.
     8
     9Инсталација
     10Visual Studio Installer → Modify → Workloads → Desktop Development with C++
     11Отвори x64 Native Tools Command Prompt as Administrator и изврши:
     12set "PGROOT=C:\Program Files\PostgreSQL\16"
     13cd %TEMP%
     14git clone --branch v0.8.2 https://github.com/pgvector/pgvector.git
     15cd pgvector
     16nmake /F Makefile.win
     17nmake /F Makefile.win install
     18
     19Во pgAdmin изврши:
     20CREATE EXTENSION vector;
     21
     22Креирање табели:
     23CREATE TABLE movie
     24(
     25    id           BIGSERIAL PRIMARY KEY,
     26    title        VARCHAR(200),
     27    genre        VARCHAR(100),
     28    release_year INTEGER,
     29    description  TEXT
     30);
     31
     32CREATE TABLE movie_embedding
     33(
     34    movie_id  BIGINT PRIMARY KEY,
     35    embedding vector(4)
     36);
     37
     38Внесување податоци:
     39INSERT INTO movie(title, genre)
     40VALUES ('Fast Racing', 'Action'),
     41       ('Formula Champions', 'Sport'),
     42       ('Space Adventure', 'Sci-Fi');
     43
     44INSERT INTO movie_embedding(movie_id, embedding)
     45VALUES (1, '[0.95, 0.87, 0.12, 0.33]'),
     46       (2, '[0.91, 0.85, 0.15, 0.30]'),
     47       (3, '[0.10, 0.12, 0.95, 0.88]');
     48
     49Similarity search (Euclidean):
     50SELECT movie.title,
     51       embedding <-> '[0.90, 0.80, 0.10, 0.20]' AS distance
     52FROM movie_embedding
     53JOIN movie ON movie.id = movie_embedding.movie_id
     54ORDER BY distance;
     55
     56SQL функција за similarity search:
     57CREATE OR REPLACE FUNCTION search_movies_by_embedding(query_embedding vector(4))
     58    RETURNS TABLE(title TEXT, distance FLOAT)
     59    LANGUAGE SQL
     60AS $$
     61SELECT movie.title,
     62       embedding <-> query_embedding AS distance
     63FROM movie_embedding
     64JOIN movie ON movie.id = movie_embedding.movie_id
     65ORDER BY distance;
     66$$;
     67
     68Top K search — враќа само најсличните N резултати:
     69SELECT movie.title
     70FROM movie_embedding
     71JOIN movie ON movie.id = movie_embedding.movie_id
     72ORDER BY embedding <-> '[0.90, 0.80, 0.10, 0.20]'
     73LIMIT 2;
     74
     75Hybrid search — комбинира филтер по жанр и similarity:
     76SELECT movie.title
     77FROM movie_embedding
     78JOIN movie ON movie.id = movie_embedding.movie_id
     79WHERE genre = 'Action'
     80ORDER BY embedding <-> '[0.90, 0.80, 0.10, 0.20]'
     81LIMIT 5;
     82
     83HNSW индекс за брзо пребарување:
     84CREATE INDEX ON movie_embedding
     85    USING hnsw (embedding vector_cosine_ops);
     86
     87Cosine similarity search:
     88SELECT movie.title,
     89       embedding <=> '[0.90, 0.80, 0.10, 0.20]' AS cosine_distance
     90FROM movie_embedding
     91JOIN movie ON movie.id = movie_embedding.movie_id
     92ORDER BY cosine_distance;
     93
     94Со pgvector го проширивме системот со можност за семантичко пребарување и препорака на филмови. Имплементирани се Euclidean и Cosine similarity search, Top K search, Hybrid search и HNSW индекс за оптимално пребарување при голем број на записи.