This is a glossary of both Vespa-specific terminology, and general terms useful in this context.
The unit of deployment and management. It can contain any number of clusters and schemas etc., but all deployed together. The files defining the application is called Application Package.
An attribute is a field with properties other than an indexed field. Attribute fields have flexible match modes, including exact match, prefix match, and case-sensitive matching. Attributes enable high sustained update rates by writing directly to memory without disk access. Features like Grouping, Sorting, and Parent/Child use attributes.
Use Predicate fields
to match queries to a set of boolean constraints in documents.
The typical use case is to have a set of boolean constraints
representing advertisements, specifying their target groups.
hobby in [Music, Hiking] and age in [20..30].
A set of homogenous nodes which all perform the same task. Vespa has two types: Container clusters are stateless, and content clusters store and process the data.
Components extend a base class from the Container code module; some are Chained for execution. The component types are:
The configuration server hosts most of the control plane of Vespa, where application packages are deployed to - often shortened to "config server". Config servers are deployed as one or in a cluster - see overview. The config server serves configuration for all Vespa processes, and is normally the first cluster started.
The deploy-commands are Vespa's control plane. The control plane is often secured with other credentials than the data plane. Often low throughput and used by automation like GitHub Actions to deploy new versions of application packages.
Document and Query APIs make the Vespa Data plane. Also see control plane. Often high throughout / low latency, as this is user-serving.
deploy is a control-plane command to upload and activate a new version of an
A deployment is a running Vespa application, created by using deploy.
Vespa is available as a container image from hub.docker.com. Products to run this image include Docker, podman and runC, and it enables users to run Vespa in a well-defined environment on multiple platforms.
Vespa models data as documents. A document has a string identifier, set by the application, unique across all documents. A document is a set of key-value pairs. A document has a Schema. Read more in Documents.
A document summary is the information that is shown for each document in a query result. What information to include is determined by a document summary class: A named set of fields with config on which information they should contain. When Vespa stores a document, it is written to the document store and used to generate summaries. The document store is scanned when using streaming search.
Document processing is a framework to create chains of configurable Components
that read and modify document operations.
A Document Processor uses
setFieldValue() to process fields,
alternatively using generated code from Concrete Documents.
The data type part of a Schema - a collection of fields.
Vespa's clusters are elastic - a user can add or remove nodes on running applications without service disruption. For the stateful content nodes, this causes data sync between nodes for uniform distribution, with minimal data re-distribution. Read more in Elasticity.
A common technique in modern big data serving applications is to map the subject data - say, text or images - to points in an abstract vector space and then do computation in that vector space. For example, retrieve similar data by finding nearby points in the vector space, or using the vectors as input to a neural net. This mapping is usually referred to as embedding, and Vespa provides built-in support for this.
The Container allows multiple sources of data to be federated to a common search service. The sources of data may be both search clusters, or external services, backed by Vespa or any other kind of service. The container may be used as a pure federation platform by setting up a system consisting solely of container nodes federating to external services.
Documents have Fields. A field has a type, and a field contained in a document can be written to, read from and queried. A field can also be generated (i.e. a synthetic field) - in this case, the field definition is outside the document. A field can be single value, like a string, or multivalue, like an array of strings.
Vespa Grouping is a list processing language which describes how the query hits should be grouped, aggregated and presented in result sets. A grouping statement takes the list of all matches to a query as input and groups/aggregates it, possibly in multiple nested and parallel ways to produce the output. Read more.
The process of creating index structures. This includes routing document writes to indexing processors, processing (indexing) documents and writing the documents to content clusters. Settings like streaming search do not create indices to optimize resource usage.
Instance is always "default" in Vespa.ai (i.e. there is only one) - managed services like Vespa Cloud support multiple, read more. An instance is a deployment of an application for a given purpose, like production serving - multiple instances of an application can be used to support more use cases like integration testing.
Nearest neighbor search
Nearest neighbor search, or vector search, is a technique used to find the closest data points to a given query point in a high-dimensional vector space - see distance metric. It can be exact or approximate. This is supported in Vespa using the nearestNeighbor query operator.
Parent / Child
Using document references, documents can have parent/child relationships. Use this to join data by importing fields from parent documents. Parent documents are replicated to all nodes in the cluster.
A partial update is an update to one or more fields in a document. It also includes updating all index structures, so the effect of the partial update is immediately observable in queries. Partial updates do not require the full document, and enables a high write throughput with memory-only operations. Read more.
Quantization is the process of constraining an input from a continuous or otherwise large set of values (such as the real numbers) to a discrete set (such as the integers). It is a way to reduce memory and CPU usage for tensor operations in nearest neighbor search, to improve throughput or latencies.
Ranking is where Vespa does computing, or inference over documents. The computations to be done are expressed in functions called Ranking Expressions, bundled into Rank Profiles defined in a Schema. These can range from simple math expressions combining some rank features, to tensor expressions or large machine-learned models. Ranking can be single- or multiphased.
A description of a particular type of data and how to process/rank it. See the Schema guide.
A searcher is a Component - usually deployed as part of an OSGi bundle.
All Searchers must implement a single method
Developers implement application query logic in Searchers.
Semantic search denotes search with meaning, as distinguished from lexical search where the search engine looks for literal matches of the query words. Read Revolutionizing Semantic Search with Multi-Vector HNSW Indexing for more details on semantic search, pointers to resources, and how to implement it.
Streaming search is querying fields that do not have an index structure. The indexing cost is minimal as no index is generated. A query is hence a scan over all data, and normally slower than using index structures. Streaming search is used for applications like personal search, where the searched data volume is small. It can be a powerful option to drastically limit memory use in nearest-neighbor applications where the possible neighbor set it orders of magnitude smaller than the total.
An organizational unit that owns applications. In Vespa.ai APIs, tenant and application are always "default", and a Vespa system has exactly one tenant and one application. In managed services like Vespa Cloud, multiple tenants and applications is supported - read more.
A Tensor is a data structure which generalizes scalars, vectors and matrices to any number of dimensions: A scalar is a tensor of rank 0, a vector is a tensor of rank 1, a matrix is a tensor of rank 2. Tensors consist of a set of scalar valued cells, with each cell having a unique address. A cell's address is specified by its index or label in all the dimensions of that tensor. The number of dimensions in a tensor is the rank of the tensor, each dimension can be either mapped or indexed.
Visit is a feature to efficiently get or process a set of / all documents, identified by a Document Selection Expression. Visit iterates over all, or a set of, buckets and sends documents to a (set of) targets.