string field’s text for you. Add an embed (dense) or sparse_embed (learned-sparse) object to the field, and Pinecone embeds the text when you upsert or update a document, and embeds the query text when you search that field. You send and search with plain text and never handle vectors.
This is the same integrated embedding that the Create an index with integrated embedding operation provides for the legacy Records API, brought to document indexes, where it composes with full-text search on the same field.
Integrated embedding requires API version 2026-07. Send X-Pinecone-Api-Version: 2026-07 on REST requests, or use an SDK that supports it: Python 10.1.0 or later, Node.js 9.1.0 or later, or Go 7.1.0 or later.
Bring Your Own Cloud (BYOC) indexes can’t declare
embed or sparse_embed.Declare an embedded field
Addembed, sparse_embed, or both to a string field, inside schema.fields in the create-index request. Every key inside them is optional: an empty {} uses the platform default model at its default dimension and metric. Pinecone resolves and fixes the model, dimension, and metric at creation, and returns them when you describe the index.
embedtakes a hosted dense model (defaultllama-text-embed-v2) and optionaldimension,metric,processing_location, andwrite_parameters/read_parameters(model parameters applied when embedding on write and on query, such astruncateortask_typeforgemini-embedding-2).sparse_embedtakes a hosted sparse model (defaultpinecone-sparse-english-v0) and optionalwrite_parameters/read_parameters. Sparse embeddings have no dimension or metric.- An
embedfield uses the index’s single dense slot, and asparse_embedfield uses its single sparse slot. So an index has at most one of each, and an embedded field can’t coexist with adense_vectororsparse_vectorfield of the same type (dense or sparse).
llama-text-embed-v2 takes one of a fixed set of dimensions, while gemini-embedding-2 and the text-embedding-3 models take any integer in a range. The embedding configuration is fixed at creation: you can’t add, remove, or change embed or sparse_embed on an existing index.
Text storage and full-text search
By default (store_text: true), Pinecone stores the field’s text and returns it via include_fields. It also indexes the text for full-text search, so a string field with embed is BM25-searchable unless you opt out.
Set store_text: false to embed the text without storing it. A field with store_text: false:
- can’t declare
full_text_search. - can’t be scored with
textorquery_string, or matched with$match_phrase,$match_all, or$match_any. - still supports
embedandsparse_embedscoring. - returns a
400if named ininclude_fieldson search or fetch.["*"]leaves it out.
All three aspects
Limits
- A document and a single request are each limited to 2 MB. On an index that embeds text, that request limit also counts the vectors Pinecone derives from the text.
- An embedded value can be up to 100 KB, whether or not the text is stored. A stored value is also limited to 10,000 tokens after tokenization.
- Each model embeds only up to its max tokens, listed in the model gallery. For
pinecone-sparse-english-v0, that’s itsmax_tokens_per_sequenceparameter. Longer values are truncated by default. For a denseembedfield, settingtruncate: NONErejects an over-length value with a400instead. The full value is still stored and returned whenstore_textistrue. - Truncation applies only to embedding, so a stored value over 10,000 tokens is rejected with a
400even withtruncate: END. To embed longer text, split it into smaller documents, or setstore_text: falseto embed it without storing it. - The query text in an
embedorsparse_embedclause is limited to 10,000 bytes. A longer query is rejected with a400, not truncated.
Upsert and search embedded fields
Upsert
Upsert documents with plain text on the embedded field. You don’t supply vectors, and Pinecone embeds the text on write. A few rules apply:- When the schema declares
embedorsparse_embed, each upsert or by-ID update is embedded in one call, so it’s capped at 96 documents instead of 1,000, even when a request sets only metadata. - A dense
embedfield must appear in every document. Omitting it, or removing it in an update, is rejected with a400. Asparse_embed-only field is optional, so you can omit or remove it. - A vector or an empty string on an embedded field is rejected with a
400. - Update is a partial patch, so a field you don’t set is left unchanged. A by-filter update can’t set an embedded field; patch it by document ID.
- An update to an
_idthat doesn’t exist has no effect, but any text it sets is still embedded and metered. To add a new document, upsert it. - An upsert or update that embeds text reports the tokens it consumed as
usage.embed_total_tokens. It’s one total across all fields and models, so a field with bothembedandsparse_embedreports the dense and sparse tokens added together. Billing and monthly limits count tokens per model, so sparse tokens count toward the field’s sparse model, not its dense model.
You can’t bulk import into an index with an
embed or sparse_embed field. Add text through upsert or update instead.Search
To search, pick theembed or sparse_embed scoring method and pass query text. Pinecone embeds the query with the field’s frozen model and ranks by similarity.
include_fields. The vectors it derives from your text are internal and aren’t returned. The search response reports the query’s embedding usage as usage.embed_total_tokens. A sparse_embed query is embedded in-process, so it reports 0.
An embed or sparse_embed clause must be the only clause in score_by. You can still combine signals, because a stored embedded field is also full-text-searchable. Rank with an embed score_by, then narrow the results with a $match_phrase, $match_all, or $match_any filter on the same field (see Full-text search). To fuse two full rankings instead, run separate searches and merge them with reciprocal rank fusion.
Embed with text-embedding-3
text-embedding-3-small and text-embedding-3-large are dense models from OpenAI that are available only on document indexes. Pinecone embeds text for them through Microsoft Azure. Each model’s page lists its dimensions, token limit, metrics, and parameters.
The models are available on every plan. They process text in the global processing location by default, and you can set processing_location to us on the Standard and Enterprise plans. For monthly and per-minute token limits, see Rate limits.
This field embeds with text-embedding-3-large at 1,024 dimensions:
Shortened large embeddings
Embed with gemini-embedding-2
gemini-embedding-2 is a dense model from Google that’s available only on document indexes. Pinecone embeds text for it through Google Vertex AI. The model page lists its dimensions, token limit, metric, and parameters.
The model isn’t available on the Starter plan. Creating an index with it on Starter returns a 403 that names the field and model. If your organization moves to the Starter plan, its existing gemini-embedding-2 indexes stay, but upserts and searches on them return a 403 until you upgrade again. For monthly and per-minute token limits, see Rate limits.
Task types
gemini-embedding-2 embeds text differently depending on what the embedding is for. You choose this with the task_type parameter. Each task belongs to one of three kinds:
- Write task:
retrieval_documentembeds the stored text of a field you search. - Query tasks: These embed search queries against a
retrieval_documentfield. - Symmetric tasks: These embed stored text and queries the same way, for comparing texts with each other rather than searching.
Set task types on the field
Settask_type in the field’s write_parameters and read_parameters:
write_parameters.task_typesets how Pinecone embeds the stored text. It defaults toretrieval_documentand acceptsretrieval_documentor a symmetric task. A query task is rejected with a400.read_parameters.task_typesets the default task for queries. If you don’t set it, it follows the write task:retrieval_queryfor aretrieval_documentfield, or the same task for a symmetric field.- A
retrieval_documentfield accepts any query task on read. A symmetric field accepts only its own task, so aclusteringfield is always searched withclustering. - The write task is fixed at creation, like the rest of the embedding configuration. An index has one
embedfield, so to embed the same text for a different write task, such asretrieval_documentandclustering, create a second index.
Questions against articles
clustering too:
Clustered tickets
write_parameters and read_parameters show the resolved task types.
Override the task for one search
To embed one search’s query with a different task, setparameters on the embed clause. It overrides the field’s read_parameters for that search only. The Python SDK 10.3.0, Node.js SDK 9.2.0, and Go SDK 7.2.0 and later support parameters. For example, this search checks a statement against the body field from the preceding example, whose default query task is question_answering:
parameters:
- Only
embedclauses takeparameters, and onlytask_typecan be set per search. Any other key, such astruncate, is rejected with a400. - The task must be one the field accepts on read. A query task on a symmetric field, or
retrieval_documenton any field, is rejected with a400that names the tasks the field allows. - A model without task types, such as
llama-text-embed-v2, rejectsparameters.task_typewith a400. - An empty
parametersobject has no effect. - Upserts and updates don’t take a per-request task. Stored text always uses the field’s write task.
Find a model’s parameters
Each model’s page in the model gallery lists the parameters it accepts. The List models operation also returns each model’ssupported_parameters with their accepted values. It doesn’t say which parameters apply on write, on read, or per search, so use the rules on this page for task_type and Processing locations for processing_location. List models doesn’t require an API key.