跳到主要内容

SearchIteratorV2()

Addedv2.5.xModifiedv2.6.x

This operation creates an iterator for you to iterate over the search results. It is useful, especially when the search result contains a large volume of data.

public SearchIteratorV2 searchIteratorV2(SearchIteratorReqV2 request)

Request Syntax

searchIteratorV2(SearchIteratorReqV2.builder()
.databaseName(String databaseName)
.collectionName(String collectionName)
.partitionNames(List<String> partitionNames)
.vectorFieldName(String vectorFieldName)
.topK(int topK)
.limit(long limit)
.filter(String filter)
.outputFields(List<String> outputFields)
.vectors(List<BaseVector> vectors)
.roundDecimal(int roundDecimal)
.searchParams(Map<String, Object> searchParams)
.consistencyLevel(ConsistencyLevel consistencyLevel)
.ignoreGrowing(boolean ignoreGrowing)
.timezone(String timezone)
.groupByFieldName(String groupByFieldName)
.batchSize(long batchSize)
.filterTemplateValues(Map<String, Object> filterTemplateValues)
.build()
);

BUILDER METHODS:

  • databaseName(String databaseName) -

    The name of the database. Defaults to the current database if not specified.

  • collectionName(String collectionName) -

    The name of the target collection.

  • partitionNames(List<String> partitionNames) -

    A list of partition names to target.

  • vectorFieldName(String vectorFieldName) -

    The name of the vector field.

  • topK(int topK) -

    The number of top results to return.

  • limit(long limit) -

    The maximum number of results to return.

  • filter(String filter) -

    A boolean expression to filter results.

  • outputFields(List<String> outputFields) -

    A list of field names to include in the output.

  • vectors(List<BaseVector> vectors) -

    A list of vectors to search with.

  • roundDecimal(int roundDecimal) -

    The number of decimal places for distance/score rounding.

  • searchParams(Map<String, Object> searchParams) -

    Additional search parameters as key-value pairs.

  • consistencyLevel(ConsistencyLevel consistencyLevel) -

    The consistency level for the operation.

  • ignoreGrowing(boolean ignoreGrowing) -

    Whether to ignore growing segments during the operation.

  • timezone(String timezone) -

    The timezone string for time-related filters.

  • groupByFieldName(String groupByFieldName) -

    The field name to group search results by.

  • batchSize(long batchSize) -

    The batch size for iterator operations.

  • filterTemplateValues(Map<String, Object> filterTemplateValues) -

    A map of template variable values for parameterized filters.

RETURNS:

SearchIteratorV2

A SearchIteratorV2 object to iterate search results, which offers the following methods:

EXCEPTIONS:

  • MilvusClientException

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

Example

import io.milvus.orm.iterator.SearchIteratorV2;
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.vector.request.SearchIteratorReqV2;
import io.milvus.v2.service.vector.request.data.FloatVec;
import io.milvus.v2.service.vector.response.SearchResp;

import java.util.*;
import java.util.function.Function;

// 1. Set up a client
ConnectConfig connectConfig = ConnectConfig.builder()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN")
.build();

MilvusClientV2 client = new MilvusClientV2(connectConfig);

// 2. Prepare inputs
List<Float> vector = generateFloatVector();

Map<String,Object> extraParams = new HashMap<>();
extraParams.put("radius",15.0);

Function<List<SearchResp.SearchResult>, List<SearchResp.SearchResult>> externalFilterFunc = (List<SearchResp.SearchResult> src)->{
List<SearchResp.SearchResult> newRes = new ArrayList<>();
for (SearchResp.SearchResult res : src) {
long id = (long)res.getId();
if (id%2 == 0) {
newRes.add(res);
}
}
return newRes;
};

// 3. Iterator search
SearchIteratorV2 searchIterator = client.searchIteratorV2(SearchIteratorReqV2.builder()
.collectionName("test")
.outputFields(Lists.newArrayList("vector"))
.batchSize(50L)
.vectorFieldName("vector")
.vectors(Collections.singletonList(new FloatVec(vector)))
.filter("id > 100")
.searchParams(extraParams)
.topK(300)
.metricType(IndexParam.MetricType.L2)
.consistencyLevel(ConsistencyLevel.BOUNDED)
.externalFilterFunc(externalFilterFunc)
.build());

System.out.println("SearchIteratorV2 results:");
while (true) {
List<SearchResp.SearchResult> res = searchIterator.next();
if (res.isEmpty()) {
System.out.println("Search iteration finished, close");
searchIterator.close();
break;
}

for (SearchResp.SearchResult record : res) {
System.out.println(record);
}
}