Implementing Semantic Search

1. Encoding Text Queries

Example: Query Embedding

q = "how does vector search work?"
qv = client.embeddings.create(
    model="text-embedding-3-small", input=q
).data[0].embedding
TipDetail
Same model as docsMismatched models = poor results
Query prefixese.g., e5 wants query: prefix

Example: Semantic Query

res = index.query(vector=qv, top_k=10, include_metadata=True)
hits = [(m["metadata"]["title"], m["score"]) for m in res["matches"]]

3. Ranking Results by Similarity

StageDetail
Initial rankBy Pinecone score
Re-rankCross-encoder for top-50 → top-10
Business boostRecency, popularity factors

Example: Facets via Filter

res = index.query(
    vector=qv, top_k=10, include_metadata=True,
    filter={"$and": [
        {"category": "tech"},
        {"language": "en"},
        {"published_year": {"$gte": 2024}},
    ]},
)

5. Using Boosting Strategies

Boost TypeImplementation
Recencyscore + decay(age)
Popularityscore + log(views)
AuthorityFilter / multiply by source weight
PersonalizationAdd user-pref vector to query

6. Implementing Personalization

Example: Bias Query Vector

import numpy as np

def personalize(query_vec, user_vec, weight=0.2):
    qv = np.array(query_vec); uv = np.array(user_vec)
    blended = (1 - weight) * qv + weight * uv
    blended /= np.linalg.norm(blended)
    return blended.tolist()
StrategyDetail
Multilingual modelmultilingual-e5, Cohere embed-v3
Per-language namespaceIsolated indexes per locale
Translate at query timeNormalize to English embeddings

8. Implementing Auto-Complete

Example: Prefix + Embedding

# Combine prefix filter + semantic suggestion
prefix = user_input
qv = embed(prefix)
res = index.query(vector=qv, top_k=5,
    filter={"title_lc": {"$in": matching_prefixes(prefix)}})

9. Optimizing Search Relevance

LeverEffect
Hybrid searchBetter keyword match
Reranker+5–15% relevance
Chunk size tuning200–500 tokens typical
Query expansionLLM rewrites query

10. A/B Testing Search Strategies

A/B Test Loop

  1. Split traffic 50/50 between strategy A and B.
  2. Log query, returned IDs, user clicks/conversions.
  3. Compute CTR@K, MRR, nDCG per variant.
  4. Decide winner with statistical significance.
MetricMeaning
CTR@KClicks in top-K / impressions
MRRMean reciprocal rank of first click
nDCGGraded relevance score