Scrapeless Wiki

What Is Pinecone? – Definition and How It Works

Informational P2 what is pinecone

Learn what Pinecone provides as a managed vector database, how namespaces and metadata filtering work, and the trade-offs.

Pinecone is a fully managed vector database. There is no index to tune, no server to run, and no local option β€” you call an API.

1. The Managed Model

Concern Who handles it
Index type and parameters Pinecone
Scaling and sharding Pinecone
Replication and durability Pinecone
Upgrades Pinecone
Your data location Your cloud/region choice
Cost control You, via configuration

The appeal is that ANN tuning β€” M, ef_search, quantisation, memory sizing β€” simply is not your problem. The cost is that it cannot run locally, and you are dependent on a service.

2. The Basics

from pinecone import Pinecone, ServerlessSpec

pc = Pinecone(api_key=API_KEY)
pc.create_index(
    name="chunks", dimension=1536, metric="cosine",
    spec=ServerlessSpec(cloud="aws", region="us-east-1"),
)

index = pc.Index("chunks")
index.upsert(vectors=[
    ("chunk-1", embedding, {"source_url": "https://example.com/guide",
                            "heading": "Timeouts", "lang": "en",
                            "fetched_at": "2026-08-18"}),
], namespace="site-example")

upsert keyed on your own id makes reindexing a page idempotent β€” re-sending the same id replaces rather than duplicating.

3. Namespaces Are the Useful Primitive

A namespace partitions an index, and queries run within one:

index.query(vector=q, top_k=10, namespace="site-example",
            filter={"lang": {"$eq": "en"}}, include_metadata=True)

That maps cleanly onto collection work: a namespace per source site, per tenant, or per corpus version. Two properties make it valuable:

  • Queries stay scoped, so one site's chunks cannot contaminate another's results.
  • A namespace can be deleted wholesale, which makes re-collecting a site a clean operation rather than a selective delete.

4. Metadata Filtering

Filters use a MongoDB-like operator syntax β€” $eq, $ne, $in, $gte, $and, $or β€” applied alongside the vector search.

The constraint to know: metadata is for filtering, not for storing your payload. There are size limits, and using it as a document store is both expensive and against the grain. The normal pattern is filterable fields in metadata and the full record in your own database, joined on the id.

5. Where It Fits

Good fit: you want no operational burden, the corpus is large enough that self-hosting is real work, you need managed scaling, and a hosted dependency is acceptable.

Poor fit: you need local or air-gapped operation, you want SQL joins against the vectors, cost per vector at your scale is prohibitive, or you need full control over index internals.

6. Compared With the Alternatives

Option Trade
Pinecone No operations; hosted dependency, no local mode
Qdrant Self-hostable, filtering during traversal, sparse vectors
Weaviate Schema, built-in vectorisers, hybrid in one call
pgvector SQL joins, one system, you operate Postgres
FAISS No infrastructure, in-process, static data

The decision usually turns on two questions: do you need to run it locally, and do you need to join vectors against relational data. A "yes" to either points away from Pinecone.

7. Practical Notes

  1. Use your own ids so upserts are idempotent and reindexing is safe.
  2. One namespace per source, so deletion and scoping are clean.
  3. Keep metadata small β€” filterable fields only, payload in your own store.
  4. Batch upserts; per-vector calls are slow and costly.
  5. Watch the cost model. Managed vector storage is priced per vector and per operation, and a large corpus adds up.
  6. Store the embedding model and version in metadata, so a model change is traceable.
  7. Treat the API key as a credential in a secret manager.

Point 6 is easy to omit and painful later: an index containing vectors from two embedding model versions produces silently degraded results, because the vectors are not comparable.

8. Summary

Pinecone is a fully managed vector database with no index tuning and no local mode, organised around indexes, namespaces, and MongoDB-style metadata filters.

Namespaces per source make scoping and wholesale re-collection clean, metadata should hold only filterable fields with the payload in your own store, and recording the embedding model version in metadata prevents the silent degradation that comes from mixing vectors from two model versions in one index.