milvus-logo
LFAI
< Docs
  • Java

hybridSearch()

This operation performs multi-vector search on a collection and returns search results after reranking.

public SearchResp hybridSearch(HybridSearchReq request)

Request Syntax

hybridSearch(HybridSearchReq.builder()
    .collectionName(String collectionName)
    .databasename(String databaseName)
    .partitionNames(List<String> partitionNames)
    .searchRequests(List<AnnSearchReq> searchRequests)
    .ranker(BaseRanker ranker)
    .topK(int topK)
    .outFields(List<String> outFields)
    .roundDecimal(int roundDecimal)
    .consistencyLevel(ConsistencyLevel consistencyLevel)
    .build()
)
  • collectionName(String collectionName)

    The name of an existing collection.

  • databasename(String databaseName)

    Target database name(optional).
    
  • partitionNames(List<String> partitionNames)

    A list of partition names.

  • searchRequests(List<AnnSearchReq> searchRequests)

    A list of search requests, where each request is an **AnnSearchReq** object. Each request corresponds to a different vector field and a different set of search parameters.
    
  • topK(int topK)

    The total number of entities to return.

  • outFields(List<String> outFields)

    A list of field names to include in each entity in return. The value defaults to null. If left unspecified, only the primary field is included.
    
  • roundDecimal(int roundDecimal)

    The number of decimal places that Milvus rounds the calculated distances to. The value defaults to **-1**, indicating that Milvus skips rounding the calculated distances and returns the raw value.
    
  • consistencyLevel(ConsistencyLevel consistencyLevel)

    The consistency level of the target collection. The value defaults to the one specified when you create the current collection.
    

RETURN TYPE:

SearchResp

RETURNS:

A SearchResp object representing specific search results with the specified output fields and relevance score.

PARAMETERS:

  • searchResults(List<List<SearchResult>>)

    A list of SearchResp.SearchResult, the size of searchResults equals the number of query vectors of the search. Each List\<SearchResult\> is a topK result of a query vector. Each SearchResult represents an entity hit by the search.
    
    Member of SearchResult:
    

EXCEPTIONS:

  • MilvusClientExceptions

    This exception will be raised when any error occurs during this operation.

Example

List<Float> floatVector = generateFolatVector();
ByteBuffer binaryVector = generateBinaryVector();
SortedMap<Long, Float> sparseVector = generateSparseVector();

List<AnnSearchReq> searchRequests = new ArrayList<>();
searchRequests.add(AnnSearchReq.builder()
        .vectorFieldName("float_vector")
        .vectors(Collections.singletonList(new FloatVec(floatVector)))
        .params("{\"nprobe\": 10}")
        .topK(10)
        .build());
searchRequests.add(AnnSearchReq.builder()
        .vectorFieldName("binary_vector")
        .vectors(Collections.singletonList(new BinaryVec(binaryVector)))
        .topK(50)
        .build());
searchRequests.add(AnnSearchReq.builder()
        .vectorFieldName("sparse_vector")
        .vectors(Collections.singletonList(new SparseFloatVec(sparseVector)))
        .topK(100)
        .build());

HybridSearchReq hybridSearchReq = HybridSearchReq.builder()
        .collectionName(randomCollectionName)
        .searchRequests(searchRequests)
        .ranker(new RRFRanker(20))
        .topK(10)
        .consistencyLevel(ConsistencyLevel.BOUNDED)
        .build();
SearchResp searchResp = client.hybridSearch(hybridSearchReq);
List<List<SearchResp.SearchResult>> searchResults = searchResp.getSearchResults();
List<SearchResp.SearchResult> results = searchResults.get(0); // nq = 1, searchResults size is 1
for (SearchResp.SearchResult result : results) {
    System.out.printf("ID: %d, Score: %f, %s\n", (long)result.getId(), result.getScore(), result.getEntity().toString());
}

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Was this page helpful?