Vector Search Concept
Vector search finds documents that are semantically similar to a query by comparing their embeddings. It is the core search mechanism that makes RAG work.
10 min•By Priygop Team•Updated 2026
How Vector Search Works
Vector search works in three steps:
- 1All document chunks are converted to embeddings (during setup, before any queries arrive).
- 2When a user asks a question, the question is also converted to an embedding.
- 3The system compares the question's embedding to all document embeddings and returns the most similar ones.
Similarity is measured by comparing the numerical vectors. The most common method is cosine similarity: two vectors pointing in a similar direction are considered similar in meaning.
Diagram
Loading diagram…
Deep Learning ⊂ Machine Learning ⊂ Artificial Intelligence
Cosine Similarity: Simple Illustration
Cosine Similarity: Simple Illustration
# Simple illustration of similarity comparison
# Real vector search uses high-dimensional mathematics
import math
def cosine_similarity(vector_a, vector_b):
"""
Calculate how similar two vectors are.
Result: 1.0 = identical meaning, 0.0 = completely unrelated
This is the mathematics used for semantic search.
"""
# Dot product of the two vectors
dot_product = sum(a * b for a, b in zip(vector_a, vector_b))
# Magnitude (length) of each vector
magnitude_a = math.sqrt(sum(a ** 2 for a in vector_a))
magnitude_b = math.sqrt(sum(b ** 2 for b in vector_b))
if magnitude_a == 0 or magnitude_b == 0:
return 0
return dot_product / (magnitude_a * magnitude_b)
# Simplified 3D embeddings for illustration
# (Real embeddings have 1536 dimensions)
embeddings = {
"question": [0.8, 0.1, 0.6], # 'How do I return a product?'
"doc_return_policy": [0.75, 0.15, 0.65], # 'Our return policy allows...'
"doc_shipping": [0.2, 0.9, 0.1], # 'Shipping takes 3-5 days'
"doc_pricing": [0.3, 0.7, 0.2], # 'Product prices start at...'
}
question_vec = embeddings["question"]
print("Semantic similarity scores:")
print(f"Question: 'How do I return a product?'")
print()
for doc_name, doc_vec in list(embeddings.items())[1:]: # Skip question itself
similarity = cosine_similarity(question_vec, doc_vec)
relevance = "RETRIEVED" if similarity > 0.7 else "not retrieved"
print(f" {doc_name}: {similarity:.3f} similarity -> {relevance}")
print()
print("The most similar document (return policy) would be")
print("retrieved and included in the prompt to the LLM.")