Dark metal storage lockers with red-glowing rows in an industrial setting: each locker represents an index partition storing embedding vectors, searchable by similarity rather than exact key.
A vector database is not a locker with a label. It is a locker that knows which other lockers are nearby.

Pinecone and Weaviate both store and search high-dimensional vectors for semantic search and retrieval-augmented generation (RAG) applications. Pinecone is a fully managed SaaS platform with no self-hosting option. Weaviate is open-source and available as a self-hosted deployment or a managed cloud service. The right choice depends on your infrastructure preferences, budget model, and feature requirements.

How both fit in a RAG stack

Data
Raw documents PDFs Structured records Chunked and pre-processed before embedding
Embedding
OpenAI text-embedding-3 Cohere Embed v3 BGE-M3 Pinecone: bring your own vectors. Weaviate: optionally integrates vectorizer modules
Vector Store
Pinecone (managed SaaS, serverless or pod-based) Weaviate (open-source or Weaviate Cloud) Both support dense vectors; Weaviate adds native hybrid search
Retrieval
Semantic search Hybrid search (BM25 + vector) Filtered search Reranking models applied post-retrieval to improve relevance
Generation
GPT-4o Claude 4 Gemini 2.0 Retrieved context injected into the LLM prompt

Architecture

Pinecone

Pinecone is a purpose-built managed vector database. You cannot run it on your own servers. All infrastructure is operated by Pinecone.

Two deployment tiers are available:

Serverless: Index storage and compute are decoupled. You pay per query and per GB of vectors stored. Cold-start latency exists when an index has not been queried recently, but the trade-off is that you pay nothing during idle periods. This is the default for new users and suitable for variable or unpredictable workloads.

Pod-based: Dedicated compute pods with predictable, consistent latency. You choose pod type (s1 for storage-optimized, p1/p2 for performance) and reserve capacity up front. This tier suits high-query production systems where tail latency matters.

Pinecone uses a proprietary index format. The internal algorithm is undisclosed, but Pinecone states that it is ANNS (approximate nearest neighbor search) based and tuned for cloud-scale horizontal distribution. You interact through the Pinecone SDK or REST API. There is no access to the underlying system.

Pinecone stores vector IDs, vectors, and metadata (key-value pairs). It does not store full document text. You retrieve IDs and use them to fetch full content from your primary database or object store.

As of 2026, Pinecone supports namespaces for logical data isolation within a single index, sparse-dense hybrid search via its own sparse vector type, and a Pinecone Inference API that embeds text directly before insertion or search.

Weaviate

Weaviate is an open-source vector database built around a graph-object model. Each object has properties and one or more vectors. You can store full text, structured fields, and vectors in the same object, removing the need to fetch content from a separate store after retrieval.

Weaviate uses HNSW (Hierarchical Navigable Small World) as its primary index. It supports ACORN-optimized filtered HNSW search, which improves accuracy on heavily filtered queries. In flat-index mode (for very small collections), Weaviate performs exhaustive search.

Vectorizer modules plug into Weaviate at the schema level. When you insert an object, Weaviate can call an external model API (OpenAI, Cohere, Hugging Face) to generate the vector automatically. You can also supply pre-computed vectors directly.

As of v1.37 (April 2026), Weaviate ships a built-in Model Context Protocol (MCP) server at /v1/mcp. AI agents and IDEs can query and write to the database without a custom integration layer.

Weaviate exposes REST, GraphQL, and gRPC APIs. The gRPC path is the high-performance route for batch imports and high-throughput search.

Deployment options:

  • Self-hosted: Docker Compose for single-node development. Kubernetes Helm chart for production clusters with replication and horizontal scaling.
  • Weaviate Cloud: Managed service with Sandbox (free, limited), Flex (usage-based, starting around €40/month), and enterprise tiers with dedicated infrastructure and stronger SLAs.

Setup and code examples

Pinecone

bash
pip install pinecone
python
from pinecone import Pinecone, ServerlessSpec

pc = Pinecone(api_key="YOUR_API_KEY")

# Create an index (1536 dimensions = OpenAI text-embedding-3-small)
pc.create_index(
    name="docs-index",
    dimension=1536,
    metric="cosine",
    spec=ServerlessSpec(cloud="aws", region="us-east-1")
)

index = pc.Index("docs-index")

# Upsert vectors with metadata
index.upsert(vectors=[
    {
        "id": "doc-001",
        "values": [0.1, 0.2, ...],  # your 1536-dimensional vector
        "metadata": {"source": "annual-report-2025.pdf", "page": 12}
    },
    {
        "id": "doc-002",
        "values": [0.3, 0.4, ...],
        "metadata": {"source": "product-spec.pdf", "page": 3}
    }
])

# Query with metadata filter
results = index.query(
    vector=[0.15, 0.25, ...],
    top_k=5,
    filter={"source": {"$eq": "annual-report-2025.pdf"}},
    include_metadata=True
)

for match in results["matches"]:
    print(match["id"], match["score"], match["metadata"])

Weaviate

bash
pip install weaviate-client
python
import weaviate
import weaviate.classes as wvc

# Connect to local Weaviate instance
client = weaviate.connect_to_local()

# Or connect to Weaviate Cloud
# client = weaviate.connect_to_weaviate_cloud(
#     cluster_url="https://YOUR-CLUSTER.weaviate.network",
#     auth_credentials=weaviate.auth.AuthApiKey("YOUR_API_KEY")
# )

# Create a collection with OpenAI vectorizer
client.collections.create(
    name="Document",
    vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(
        model="text-embedding-3-small"
    ),
    properties=[
        wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT),
        wvc.config.Property(name="source", data_type=wvc.config.DataType.TEXT),
        wvc.config.Property(name="page", data_type=wvc.config.DataType.INT),
    ]
)

collection = client.collections.get("Document")

# Insert objects (Weaviate vectorizes automatically via the module)
collection.data.insert_many([
    {"content": "Revenue grew 18% in Q4...", "source": "annual-report-2025.pdf", "page": 12},
    {"content": "The API supports REST and gRPC...", "source": "product-spec.pdf", "page": 3},
])

# Semantic search
results = collection.query.near_text(
    query="quarterly revenue growth",
    limit=5,
    filters=wvc.query.Filter.by_property("source").equal("annual-report-2025.pdf"),
    return_properties=["content", "source", "page"]
)

for obj in results.objects:
    print(obj.properties)

client.close()

Key feature comparison

FeaturePineconeWeaviate
HostingManaged SaaS onlySelf-hosted or Weaviate Cloud
LicenseProprietaryApache 2.0 (core)
Serverless tierYes (pay-per-query)No (Weaviate Cloud is pod-based)
Hybrid searchYes (sparse-dense, native)Yes (BM25 + vector, native)
Multi-tenancyNamespaces (logical isolation within index)First-class multi-tenancy (separate HNSW graphs per tenant)
Max vector dimensions20,000No hard limit (practical limit: model output dimensions)
Metadata filteringKey-value metadata filter at query timeProperty-based filter with index acceleration
Built-in vectorizerYes (Pinecone Inference API)Yes (module system: OpenAI, Cohere, Hugging Face, and others)
Full text storageNo (IDs and metadata only)Yes (full object with all properties)
BackupsManaged by Pinecone (serverless); manual collections export (pod)Self-hosted: manual snapshots; Weaviate Cloud: automated backups
Free tierFree Serverless tier (up to 2GB storage, limited pods)Weaviate Cloud Sandbox (14-day trial, limited objects)
gRPC APINoYes (v1.23 onward)
MCP serverNoYes (v1.37 onward, at /v1/mcp)

RAG retrieval flow

Step 1 User query User submits a natural language question to your application.
Step 2 Embed query Send the query to your embedding model (e.g. OpenAI text-embedding-3-small) to produce a query vector.
Step 3 Vector search Send the query vector to Pinecone or Weaviate. Retrieve the top-k nearest neighbors by cosine or dot-product similarity.
Step 4 Filter results Apply metadata filters (date range, document type, tenant ID) to narrow the result set before or alongside the vector search.
Step 5 Rerank Optionally pass the candidate chunks through a cross-encoder reranker (Cohere Rerank, Jina Reranker) to improve relevance ordering.
Step 6 Context assembly Concatenate the top chunks into the LLM prompt. Send to GPT-4o, Claude 4, or Gemini 2.0 to generate the final answer.

Both Pinecone and Weaviate support hybrid search, which combines dense vector similarity with BM25 keyword scoring. This improves recall for queries that contain specific product names, codes, or rare terms that a dense vector model may not capture reliably.

Pinecone implements hybrid search through sparse-dense vectors. You generate a sparse vector (using BM25 or SPLADE) alongside your dense vector and upsert both. At query time, you send both vectors and set an alpha parameter to control the blend (0 = pure BM25, 1 = pure dense vector).

Weaviate implements hybrid search natively at the query level. You call collection.query.hybrid() with a query string and a weight parameter (alpha). Weaviate handles the BM25 scoring internally using its built-in inverted index.

Weaviate’s approach requires no changes to your ingestion pipeline. Pinecone’s approach requires you to generate and store sparse vectors at ingest time, which adds a step but gives you more control over the sparse representation.

Multi-tenancy

Multi-tenancy is important for SaaS applications where each customer’s data must be isolated.

Pinecone supports namespaces. Each namespace is a logical partition within a single index. Namespaces share the same pod resources. They provide logical isolation, not resource isolation. A noisy namespace can affect query latency for other namespaces on the same pod tier. In the serverless tier, resource isolation is managed by the platform.

Weaviate supports first-class multi-tenancy at the collection level. Each tenant gets a separate HNSW graph. This provides true data isolation and prevents cross-tenant interference. You can activate or deactivate tenants to control memory usage. This model scales to hundreds of thousands of tenants, which makes Weaviate a better fit for SaaS products with many smaller customers.

Pricing model

Pinecone Serverless: Charged per query (read units) and per GB of vectors stored (write units). Low-traffic projects stay inexpensive. High-traffic projects can become expensive quickly because each query incurs a cost. A free Starter tier provides 2GB storage and limited query throughput with no credit card required.

Pinecone Pod-based: Reserved capacity at a fixed hourly rate per pod. Predictable cost but you pay for idle capacity. Pricing starts around $0.096/hour per p1 pod (verify current rates on the Pinecone pricing page).

Weaviate self-hosted: Infrastructure cost only. A three-node production Kubernetes cluster on AWS EC2 (r6g.large) costs roughly €120-180/month at 2026 EU on-demand rates, depending on storage and data transfer. You absorb the operational burden.

Weaviate Cloud Flex: Usage-based billing driven by vector dimensions stored, object storage, and backup storage. Estimated starting cost for a small RAG system (1 million objects at 1536 dimensions) is around €40-60/month. Enterprise tiers with dedicated infrastructure add SLA guarantees and support.

When to use Pinecone

  • Your team has no infrastructure engineers and needs zero operational overhead. Pinecone requires no Kubernetes expertise, no backup configuration, and no monitoring setup.
  • Your workload is bursty or unpredictable. The Serverless tier charges per query, so idle periods cost nothing.
  • You need the fastest possible time to a working production vector search. Pinecone’s SDK is straightforward, and the managed service is production-ready from day one.
  • You are migrating from an earlier Pinecone setup and the ecosystem lock-in is acceptable because the operational simplicity outweighs the portability cost.

When to use Weaviate

  • You need self-hosting for data residency, compliance, or cost reasons. Weaviate runs entirely on your infrastructure.
  • You are building a SaaS product with hundreds or thousands of tenants. Weaviate’s per-tenant HNSW isolation is purpose-built for this pattern.
  • You want to store full document text alongside vectors and avoid a second database lookup after retrieval.
  • You are building AI agents that need to interact with the vector store via MCP. Weaviate’s built-in MCP server (v1.37 onward) removes integration boilerplate.
  • You need a built-in vectorizer pipeline. Weaviate’s module system calls embedding APIs automatically, which simplifies your ingestion code.

When to use neither

Use pgvector when your dataset stays under 5 million vectors and your application already runs on PostgreSQL. pgvector adds vector search to your existing database with no new infrastructure. You get full SQL, ACID transactions, and no synchronization complexity. The iterative index scans added in pgvector 0.8.0 address the overfiltering problem that previously made pgvector unreliable for filtered queries. See Weaviate vs pgvector for a detailed comparison.

Use Qdrant if raw performance benchmarks are your primary criterion. Qdrant is written entirely in Rust, supports scalar, product, and binary quantization, and has consistently ranked first in ANN benchmarks on high-dimensional datasets at scale. It requires self-hosting (or Qdrant Cloud) and more operational investment than Pinecone. See Chroma vs Qdrant for context on the Qdrant feature set.

Use Milvus if you need GPU-accelerated indexing at billion-vector scale on your own hardware. Milvus is designed for the largest dataset sizes and supports DiskANN for on-disk HNSW indexing, which reduces memory costs at scale. See Milvus vs OpenSearch for a breakdown of that comparison.

Further reading