This project implements a semantic movie recommendation system using Oracle Database with native vector support.
Instead of traditional filtering (genre, rating), the system uses:
- text embeddings
- cosine similarity
- vector search (ANN)
to recommend movies based on semantic similarity.
TMDB API (external data)
│
▼
Ingestion Script (Deno + TypeScript)
│
▼
Oracle Database (Docker container)
│
├─ Store movie data (relational + JSON)
├─ Generate embeddings → VECTOR(384) (ONNX model)
├─ Create vector index (ANN)
└─ Similarity search (cosine distance)
│
▼
Web Server (Hono)
│
▼
Client (Browser UI)
The all-MiniLM-L6-v2 model (ONNX format) is copied into the Docker container and loaded into Oracle.
This allows embeddings to be generated directly inside the database.
Movie data is fetched from the TMDB API using the ingestion script and inserted into the database.
title + genres + overview
UPDATE movies
SET embedding = VECTOR_EMBEDDING(mini_lm_model USING text_input);Each movie is transformed into a 384-dimensional embedding vector.
CREATE VECTOR INDEX movies_emb_idx
ON movies (embedding)
DISTANCE COSINE;This enables efficient similarity search.
SELECT *
FROM movies
ORDER BY VECTOR_DISTANCE(
embedding,
(SELECT embedding FROM movies WHERE id = :id),
COSINE
)
FETCH FIRST 10 ROWS ONLY;Returns the most similar movies.
| Score | Meaning |
|---|---|
| 0.00 | Identical movie |
| < 0.05 | Almost identical |
| < 0.15 | Highly similar |
| < 0.30 | Moderately similar |
| < 0.50 | Weak similarity |
| ≥ 0.50 | Different movies |
- Score = cosine distance
- Lower = more similar
CREATE TABLE movies (
id NUMBER PRIMARY KEY,
title VARCHAR2(255),
overview CLOB,
release_date VARCHAR2(20),
poster_path VARCHAR2(255),
genres JSON,
vote_average FLOAT,
embedding VECTOR(384)
);| Layer | Technology | Purpose |
|---|---|---|
| Database | Oracle 23c | storage + vector search |
| ML Model | ONNX (MiniLM) | embeddings |
| Backend | Deno + Hono | server |
| Language | TypeScript | logic |
| Data Source | TMDB API | movie data |
| Containerization | Docker | runtime |
| Orchestration | Docker Compose | service management |
- Semantic movie recommendations
- Vector embeddings stored in DB
- Cosine similarity search
- ANN vector index
- Full pipeline (ingestion → embedding → query)