Advanced parameters for vector search
This topic describes how to set advanced parameters for vector search.
You can use VectorQuery to set advanced search parameters.
Set the number of candidates for each vector in a multi-vector search
title_vector = [0.1, 0.2, 0.3, 0.4]
content_vector = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
vectors = {
"title": VectorQuery(vector=title_vector, num_candidates=10),
"content": VectorQuery(vector=content_vector),
}
ret = collection.query(
vector=vectors,
topk=20,
)
In the code above, the title vector is set to retrieve 10 results. For the content vector, the num_candidates parameter is not set, so the number of results is determined by the topk parameter, which is 20.
Enable linear (brute-force) search
print(collection.query(vector=VectorQuery(np.random.rand(768), is_linear=True)))Do not enable linear search in a production environment because it significantly degrades search performance.
Enabling linear search does not guarantee a 100% recall rate.
For collections with quantization enabled, calculations are performed on quantized data, which may result in a recall rate of less than 100%.
For collections without quantization enabled, the recall rate is 100%.
Adjust the ef parameter for HNSW search
print(collection.query(vector=VectorQuery(np.random.rand(768), ef=100)))In a Hierarchical Navigable Small World (HNSW) index, the ef parameter specifies the number of candidates to explore during a search. For more information, see the referenced document. By adjusting the ef value, you can find a balance between search performance and recall. A larger ef value increases recall but may decrease search performance. A smaller ef value improves search performance but may decrease recall.
The ef parameter accepts a value from 0 to 4,294,967,295. If you set the value to 0, the default ef value is used.
Beyond a certain point, increasing the ef value may no longer improve performance or recall.
Do not use an excessively large ef value in a production environment because it can negatively impact search efficiency.
RNN search
A Radius Nearest Neighbor (RNN) search adds a condition to a standard vector search. This search returns only documents where the distance to the query vector does not exceed the specified radius threshold.
print(collection.query(vector=VectorQuery(np.random.rand(768), radius=1.0)))The interpretation of the radius parameter differs based on the distance metric:
For Euclidean and cosine distances, documents are returned if score <= radius.
For inner product distance, documents are returned if score >= radius.
The number of results returned by an RNN search is also limited by the topk parameter.