Searches for nearest neighbors in the encrypted index using vector similarity search. Supports single vector queries, batch queries, and semantic search with text content.
# Single vector queryindex.query(query_vectors=vector, top_k=10)# Batch vector queriesindex.query(query_vectors=vectors, top_k=10)# Semantic search with textindex.query(query_contents=text, top_k=10)
(Optional) Multiple query vectors for batch search
query_contents
str
None
(Optional) Text content for semantic search
top_k
int
None (server default: 100)
(Optional) Number of results to return per query.
n_probes
int
None
(Optional) Number of clusters to probe for search
filters
Dict
None
(Optional) Metadata filters to apply
include
List[str]
None
(Optional) Fields to include in results. None uses the server default ([] — only id is returned). Note: id is always included
greedy
bool
None (server default: false)
(Optional) Use greedy search algorithm.
rerank_mult
int
None
(Optional) Multiplier for stage 1 retrieval in reranking indexes. Stage 1 returns top_k * rerank_mult candidates before the rerank pass narrows to top_k. Higher values trade query latency for recall. Server default is 10. Ignored by indexes that do not rerank.
When np.ndarray is passed as query_vectors, queries are automatically sent in an optimized binary format for better performance.
include defaults differ between endpoints: query returns [] (only id) by default, while get returns ["vector", "contents", "metadata"].
For single queries: List[Dict] - A list of result dictionaries.
For batch queries: List[List[Dict]] - A list of result lists, one for each query vector.
# Basic similarity searchquery_vector = [0.1, 0.2, 0.3, 0.4]# include defaults to [] (only `id`); pass include to request additional fieldsresults = index.query(query_vectors=query_vector, top_k=5, include=["distance", "metadata"])# Access results (single query returns a flat list)for result in results: print(f"ID: {result['id']}, Distance: {result['distance']}")
Batch vector queries:
import numpy as np# Query multiple vectors at oncequery_vectors = [ [0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8], [0.9, 1.0, 1.1, 1.2]]# include defaults to [] (only `id`); pass include to request additional fieldsbatch_results = index.query(query_vectors=query_vectors, top_k=3, include=["distance"])# Process each query's resultsfor i, query_results in enumerate(batch_results): print(f"Results for query {i+1}:") for result in query_results: print(f" ID: {result['id']}, Distance: {result['distance']}")
# Search using text contentresults = index.query( query_contents="machine learning healthcare applications", top_k=10, include=["contents"])for result in results: print(f"Found: {result['id']}") if 'contents' in result: print(f"Content: {result['contents'][:100]}...")
Advanced filtering and options:
# Query with metadata filters and custom optionsresults = index.query( query_vectors=[0.1] * 384, top_k=20, n_probes=5, # Search more clusters for better recall rerank_mult=20, # Stage 1 returns top_k * 20 candidates before rerank filters={'category': 'healthcare', 'priority': 'high'}, include=['distance', 'metadata', 'contents'], # Must include 'contents' to access it greedy=True # Use greedy search for potentially better results)for result in results: print(f"ID: {result['id']}") print(f"Distance: {result['distance']:.4f}") print(f"Category: {result['metadata']['category']}") print(f"Content preview: {result['contents'][:50]}...") print("---")