Zvec Logo

Search Documents

The query() method supports vector similarity search, conditional filtering (like a SQL WHERE clause), or both combined in a hybrid query.

It returns a list of Doc objects, each containing the matched document and its relevance score.


Query

In Zvec, all queries are performed by passing parameters through a Query object to the query() method.

Each VectorQuery specifies:

  1. field_name: The name of the vector field to search
  2. Query source (exactly one required):
    • An explicit vector, or
    • a document id (to reuse the stored embedding of an existing document)

    You must provide exactly one of vector or id. Specifying both will raise an error.

  3. param (optional): Index-specific query parameters (e.g., ef for HNSW)

Each ZVecQuery specifies:

  1. fieldName: The name of the vector field to search
  2. vector: The query vector
  3. params (optional): Index-specific query parameters (e.g., ef for HNSW)


Query Types


Quick Start Examples

import zvec

result = collection.query(  
    vectors=zvec.VectorQuery(
        field_name="dense_embedding",
        vector=[0.1] * 768,  # Use real embedding in practice
    ),
    topk=10,
)
import zvec

result = collection.query(  
    topk=10,
    vectors=[
        zvec.VectorQuery(field_name="dense_embedding", vector=[0.1] * 768),         
        zvec.VectorQuery(field_name="sparse_embedding", vector={1: 0.1, 37: 0.43}), 
    ],
    reranker=zvec.WeightedReRanker(  
        topn=3,
        metric=zvec.MetricType.IP,
        weights={
            "dense_embedding": 1.2,
            "sparse_embedding": 1.0,
        },
    ),
)
print(result)

Conditional Filtering

result = collection.query(filter="publish_year < 1999", topk=50)
import zvec

result = collection.query(          
    vectors=zvec.VectorQuery(
        field_name="dense_embedding",
        vector=[0.1] * 768,  # Use real embedding in practice
    ),
    filter="publish_year < 1999",
    topk=10,
)