Pinecone Introduction

Set up Pinecone, create indexes, upsert vectors with metadata, and perform filtered similarity search.

Intermediate · 16 min read

Getting Started with Pinecone

from pinecone import Pinecone, ServerlessSpec
from sentence_transformers import SentenceTransformer
import os

pc = Pinecone(api_key=os.environ["PINECONE_API_KEY"])
index_name = "knowledge-base"

if index_name not in pc.list_indexes().names():
    pc.create_index(
        name=index_name, dimension=384, metric="cosine",
        spec=ServerlessSpec(cloud="aws", region="us-east-1"),
    )

index = pc.Index(index_name)
model = SentenceTransformer("all-MiniLM-L6-v2")

documents = [
    {"id": "doc-1", "text": "Python is great for machine learning", "category": "programming"},
    {"id": "doc-2", "text": "Neural networks power modern AI", "category": "ai"},
    {"id": "doc-3", "text": "React is a JavaScript UI framework", "category": "web"},
    {"id": "doc-4", "text": "Transformers revolutionized NLP", "category": "ai"},
]

vectors = [{
    "id": doc["id"],
    "values": model.encode(doc["text"]).tolist(),
    "metadata": {"text": doc["text"], "category": doc["category"]},
} for doc in documents]

index.upsert(vectors=vectors)

# Query with metadata filter
query_emb = model.encode("How do I use deep learning?").tolist()
results = index.query(
    vector=query_emb, top_k=3, include_metadata=True,
    filter={"category": {"$eq": "ai"}},
)
for match in results["matches"]:
    print(f"Score: {match['score']:.4f} | {match['metadata']['text']}")

Part of the LangChain, LangGraph & Vector DBs series on Tekivex. Browse all tutorials or explore our open-source products.