Performing Similarity Queries
Execute basic vector similarity queries using pgvector operators to find nearest neighbors in your data.
Performing Similarity Queries is a free Vector Databases: Pinecone, Weaviate & pgvector lesson on CoddyKit — lesson 3 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Vector Databases: Pinecone, Weaviate & pgvector learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Unlocking Similarity Queries
Welcome! In this lesson, we'll dive into one of the most powerful features of vector databases: similarity queries.
You'll learn how to ask your database to find items that are 'similar' to a given item, based on their vector embeddings.
Why Similarity Matters
Similarity queries are at the heart of many AI applications:
- Recommendation Systems: Find products similar to what a user liked.
- Semantic Search: Retrieve documents with similar meaning, not just keyword matches.
- Anomaly Detection: Identify data points that are unusually 'far' from others.
They help us make sense of high-dimensional data.
Measuring Vector Distance
How do we define 'similarity' for vectors? We use distance metrics.
Imagine vectors as points in space. The 'closer' two points are, the more similar their underlying data is. Different metrics measure this distance in different ways.
Euclidean Distance (L2 Norm)
Euclidean distance, also known as L2 distance, is the most intuitive metric. It's the straight-line distance between two points in a Euclidean space.
In pgvector, you use the <-> operator to calculate Euclidean distance. A smaller value means higher similarity.
Cosine Similarity / Distance
Cosine similarity measures the cosine of the angle between two vectors. It tells you if vectors are pointing in roughly the same direction, regardless of their magnitude (length).
pgvector uses the <#> operator for cosine distance. Cosine distance is 1 - cosine_similarity. A smaller cosine distance (closer to 0) means the vectors are more aligned and similar.
Preparing Our Data for Queries
To demonstrate queries, let's set up a simple table with some 3-dimensional vectors. This ensures our code snippets are runnable.
CREATE EXTENSION IF NOT EXISTS vector;
DROP TABLE IF EXISTS items;
CREATE TABLE items (
id serial PRIMARY KEY,
embedding vector(3)
);
INSERT INTO items (embedding) VALUES ('[1,2,3]');
INSERT INTO items (embedding) VALUES ('[1.1,2.1,3.1]');
INSERT INTO items (embedding) VALUES ('[10,20,30]');
INSERT INTO items (embedding) VALUES ('[0.9,1.9,2.9]');
INSERT INTO items (embedding) VALUES ('[1.2,2.2,3.2]');Euclidean Distance Query Example
Now, let's find the 3 items whose embeddings are closest to [1,2,3] using Euclidean distance.
Notice the <-> operator in action!
SELECT
id,
embedding,
embedding <-> '[1,2,3]' AS euclidean_distance
FROM items
ORDER BY euclidean_distance
LIMIT 3;Interpreting Euclidean Results
When you run the query, you'll see a euclidean_distance column. The items with the smallest distance values are the most similar to your query vector [1,2,3].
For example, [1.1,2.1,3.1] should have a very small Euclidean distance, indicating high similarity.
Cosine Distance Query Example
Next, let's perform a similarity search using cosine distance. We'll again query for items similar to [1,2,3].
Observe the <#> operator. Remember, it returns cosine distance, where lower values mean higher similarity.
SELECT
id,
embedding,
embedding <#> '[1,2,3]' AS cosine_distance
FROM items
ORDER BY cosine_distance
LIMIT 3;Interpreting Cosine Results
The cosine_distance column shows how aligned the vectors are. A value close to 0 means the vectors point in almost the same direction (very similar).
A value close to 2 means they point in opposite directions (very dissimilar). Values near 1 mean they are orthogonal.
Choosing the Right Metric
Which metric should you use?
- Euclidean distance is great when the magnitude (length) of the vector is important.
- Cosine similarity/distance is preferred when only the direction of the vector matters, not its length. This is common for text embeddings where vector length might vary but direction captures semantic meaning.
Quick Check: Operators
You've learned about two key pgvector operators for similarity queries. Let's test your knowledge!
Recap: Similarity Queries
Great job! You've learned how to perform similarity queries with pgvector.
- We use distance metrics to quantify similarity.
- Euclidean distance (
<->) measures straight-line distance. - Cosine distance (
<#>) measures the angle between vectors. - Choosing the right metric depends on whether vector magnitude or direction is more relevant for your data.
Frequently asked questions
Is the “Performing Similarity Queries” lesson free?
Yes — the full text of “Performing Similarity Queries” is free to read here on the web, and the Vector Databases: Pinecone, Weaviate & pgvector course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Vector Databases: Pinecone, Weaviate & pgvector course, upgrade to CoddyKit PRO.
What will I learn in “Performing Similarity Queries”?
Execute basic vector similarity queries using pgvector operators to find nearest neighbors in your data. You practise Vector Databases: Pinecone, Weaviate & pgvector with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Vector Databases: Pinecone, Weaviate & pgvector?
No prior experience is required. Vector Databases: Pinecone, Weaviate & pgvector on CoddyKit is structured for beginners through advanced learners; this is — lesson 3 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Performing Similarity Queries” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Vector Databases: Pinecone, Weaviate & pgvector lesson?
Yes. Every Vector Databases: Pinecone, Weaviate & pgvector lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Setting Up pgvector Extension
- Storing Vectors in PostgreSQL
- Performing Similarity Queries
- Choosing Distance Metrics in pgvector