hybridSearch()
The MilvusClient interface. This method conducts an approximate nearest neighbor (ANN) search on multiple vector fields and returns search results after reranking.
R<SearchResults> hybridSearch(HybridSearchParam requestParam);
HybridSearchParam
Use the HybridSearchParam.Builder
to construct a HybridSearchParam
object.
import io.milvus.param.dml.HybridSearchParam;
HybridSearchParam.Builder builder = HybridSearchParam.newBuilder();
Methods of HybridSearchParam.Builder
:
Method |
Description |
Parameters |
---|---|---|
withCollectionName(collectionName) |
Set the collection name. Collection name cannot be empty or null. |
collectionName: The target collection name. |
withDatabaseName(String databaseName) |
Sets the database name. database name can be null for default database. |
databaseName: The database name. |
withConsistencyLevel(ConsistencyLevelEnum consistencyLevel) |
Sets the search consistency level(Optional). |
consistencyLevel: The consistency level used in the search. |
withPartitionNames(List<String> partitionNames) |
Sets partition names list to specify search scope (Optional). |
partitionNames: The name list of partitions to be searched. |
addPartitionName(String partitionName) |
Adds a partition to specify search scope (Optional). |
partitionName: A partition name to be searched. |
withOutFields(List<String> outFields) |
Specifies output scalar fields (Optional). |
|
addOutField(String fieldName) |
Specifies an output scalar field (Optional). |
fieldName: An output field name. |
withTopK(Integer topK) |
Set topK value of ANN search. |
topK: The topk value. |
withRoundDecimal(Integer decimal) |
Specifies the decimal place for returned distance. |
decimal: How many digits reserved after the decimal point. |
addSearchRequest(AnnSearchParam searchParam) |
Adds a vector search request for a vector field. You can add |
searchParam: An AnnSearchParam object. |
withRanker(BaseRanker ranker) |
Set a ranker for rearranging number of limit results. |
ranker: The concrete ranker object. |
build() |
Construct a SearchParam object. |
N/A |
The HybridSearchParam.Builder.build()
can throw the following exceptions:
- ParamException: error if the parameter is invalid.
AnnSearchParam
The sub-request of hybridSearch()
.
Use the AnnSearchParam.Builder
to construct an AnnSearchParam
object.
import io.milvus.param.dml.AnnSearchParam;
AnnSearchParam.Builder builder = AnnSearchParam.newBuilder();
Methods of AnnSearchParam.Builder
:
Method |
Description |
Parameters |
---|---|---|
withExpr(String expr) |
Set the expression to filter scalar fields before searching(Optional).For more information please refer to this doc. |
expr: The expression to filter scalar fields. |
withMetricType(MetricType metricType) |
Set metric type of ANN search. |
metricType: The metric type to search. |
withVectorFieldName(String vectorFieldName) |
Set target vector field by name. Field name cannot be empty or null. |
vectorFieldName: The target vector field name to do ANN search. |
withTopK(Integer topK) |
Set topK value of ANN search. |
topK: The topk value. |
withParams(String params) |
Specifies the parameters of search in JSON format. The followings are valid keys of param: |
params: A JSON format string for extra parameters. |
withFloatVectors(List<List<Float>gt; vectors) |
Set the target vectors to search FloatVector field. Up to 16384 vectors allowed. |
vectors: The target vectors |
withBinaryVectors(List<ByteBuffer> vectors) |
Set the target vectors to search BinaryVector field. Up to 16384 vectors allowed. |
vectors: The target vectors |
withFloat16Vectors(List<ByteBuffer> vectors) |
Set the target vectors to search Float16Vector field. Up to 16384 vectors allowed. |
vectors: The target vectors |
withBFloat16Vectors(List<List<Float>gt; vectors) |
Set the target vectors to search BFloat16Vector field. Up to 16384 vectors allowed. |
vectors: The target vectors |
withSparseFloatVectors(List<SortedMap<Long, Float>gt; vectors) |
Set the target vectors to search SparseFloatVector field. Up to 16384 vectors allowed. |
vectors: The target vectors |
build() |
Construct a SearchParam object. |
N/A |
RRFRanker
The RRF reranking strategy, which merges results from multiple searches, favoring items that consistently appear.
Use the RRFRanker.Builder
to construct an RRFRanker
object.
import io.milvus.param.dml.ranker.RRFRanker;
RRFRanker.Builder builder = RRFRanker.newBuilder();
Methods of RRFRanker.Builder
:
Method |
Description |
Parameters |
---|---|---|
withK(Integer k) |
Sets k factor for RRF. Value cannot be negative. Default value is 60. |
k: The k factor value. |
build() |
Construct a RRFRanker object. |
N/A |
WeightedRanker
The average weighted scoring reranking strategy, which prioritizes vectors based on relevance, averaging their significance.
Use the WeightedRankerWeightedRanker.Builder
to construct a WeightedRanker
object.
import io.milvus.param.dml.ranker.WeightedRanker;
WeightedRanker.Builder builder = WeightedRanker.newBuilder();
Methods of WeightedRanker.Builder
:
Method |
Description |
Parameters |
---|---|---|
withWeights(List<Float> weights) |
Assign weights for each AnnSearchParam. The length of weights must be equal to number of AnnSearchParam. |
weights: The weight values. |
build() |
Construct a WeightedRanker object. |
N/A |
Returns
This method catches all the exceptions and returns an R<SearchResults>
object.
If the API fails on the server side, it returns the error code and message from the server.
If the API fails by RPC exception, it returns
R.Status.Unknown
and the error message of the exception.If the API succeeds, it returns valid
SearchResults
held by theR
template. You can useSearchResultsWrapper
to get the results.
Example
import io.milvus.param.dml.*;
import io.milvus.param.dml.ranker.*;
import io.milvus.grpc.SearchResults;
AnnSearchParam req1 = AnnSearchParam.newBuilder()
.withVectorFieldName(FLOAT_VECTOR_FIELD)
.withFloatVectors(floatVectors)
.withMetricType(MetricType.IP)
.withParams("{\"nprobe\": 32}")
.withTopK(10)
.build();
AnnSearchParam req2 = AnnSearchParam.newBuilder()
.withVectorFieldName(BINARY_VECTOR_FIELD)
.withBinaryVectors(binaryVectors)
.withMetricType(MetricType.HAMMING)
.withTopK(15)
.build();
HybridSearchParam searchParam = HybridSearchParam.newBuilder()
.withCollectionName(COLLECTION_NAME)
.addOutField(FLOAT_VECTOR_FIELD)
.addSearchRequest(req1)
.addSearchRequest(req2)
.withTopK(5)
.withConsistencyLevel(ConsistencyLevelEnum.STRONG)
.withRanker(RRFRanker.newBuilder()
.withK(2)
.build())
.build();
R<SearchResults> response = milvusClient.hybridSearch(searchParam);
if (response.getStatus() != R.Status.Success.getCode()) {
System.out.println(response.getMessage());
}