Zvec Logo

Search Documents

The query() method supports vector similarity search, full-text search (BM25 ranking), conditional filtering (like a SQL WHERE clause), or combinations of these.

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 Query specifies:

  1. field_name: The name of the vector or full-text field to search
  2. Query source:
    • For vector search, provide an explicit vector or a document id (to reuse the stored embedding of an existing document)
    • For full-text search, provide an fts clause

    A single Query can target either vector search or full-text search, but not both at the same time.

  3. param (optional): Index-specific query parameters (e.g., ef for HNSW or default_operator for full-text search)

Each ZVecQuery specifies:

  1. fieldName: The name of the vector or full-text field to search
  2. Query source:
    • For vector search, provide vector
    • For full-text search, provide fts
  3. params (optional): Index-specific query parameters (e.g., ef for HNSW or defaultOperator for full-text search)


Query Types


Quick Start Examples

import zvec

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

result = collection.query(  
    topk=10,
    queries=[
        zvec.Query(field_name="dense_embedding", vector=[0.1] * 768),         
        zvec.Query(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(          
    queries=zvec.Query(
        field_name="dense_embedding",
        vector=[0.1] * 768,  # Use real embedding in practice
    ),
    filter="publish_year < 1999",
    topk=10,
)
from zvec.model.param.query import Fts, Query

result = collection.query(  
    queries=Query(
        field_name="content",
        fts=Fts(match_string="machine learning"),
    ),
    topk=10,
)

On this page