# Run N queries and merge resultsqueries = [embed(t) for t in ["A", "B", "C"]]all_hits = {}for qv in queries: for m in index.query(vector=qv, top_k=10)["matches"]: prev = all_hits.get(m["id"], 0) all_hits[m["id"]] = max(prev, m["score"])top = sorted(all_hits.items(), key=lambda x: -x[1])[:10]
# Pinecone has no offset; paginate with score cursordef page(qv, max_score=None, size=20): f = {"score": {"$lt": max_score}} if max_score else {} res = index.query(vector=qv, top_k=size, filter=f or None, include_metadata=True) return res["matches"], res["matches"][-1]["score"] if res["matches"] else None
Warning: True OFFSET pagination is not supported. Use score-based cursor, or fetch larger top_k and slice.
8. Diversifying Results
Example: MMR Diversification
def mmr(query_vec, candidates, k=5, lam=0.5): selected, remaining = [], candidates[:] while len(selected) < k and remaining: best, best_score = None, -1 for c in remaining: sim_q = cos(query_vec, c["values"]) sim_sel = max((cos(c["values"], s["values"]) for s in selected), default=0) score = lam * sim_q - (1 - lam) * sim_sel if score > best_score: best, best_score = c, score selected.append(best); remaining.remove(best) return selected