Skip to content

Commit a68c755

Browse files
committed
Unify Function and Rerank
Signed-off-by: yhmo <yihua.mo@zilliz.com>
1 parent 937f557 commit a68c755

6 files changed

Lines changed: 29 additions & 20 deletions

File tree

examples/src/main/java/io/milvus/v2/HybridSearchExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ private void hybridSearch() {
213213
HybridSearchReq hybridSearchReq = HybridSearchReq.builder()
214214
.collectionName(COLLECTION_NAME)
215215
.searchRequests(searchRequests)
216-
.ranker(new WeightedRanker(Arrays.asList(0.2f, 0.5f, 0.6f)))
216+
.ranker(WeightedRanker.builder().weights(Arrays.asList(0.2f, 0.5f, 0.6f)).build())
217217
.limit(5)
218218
.consistencyLevel(ConsistencyLevel.BOUNDED)
219219
.build();

sdk-core/src/main/java/io/milvus/v2/service/vector/request/ranker/BaseRanker.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,18 @@
1919

2020
package io.milvus.v2.service.vector.request.ranker;
2121

22-
import java.util.Map;
22+
import io.milvus.common.clientenum.FunctionType;
23+
import io.milvus.v2.service.collection.request.CreateCollectionReq;
24+
import lombok.experimental.SuperBuilder;
2325

24-
public abstract class BaseRanker {
25-
public abstract Map<String, String> getProperties();
26+
// In v2.6, the Function and Rerank have been unified to support more rerank types: decay and model ranker
27+
// https://milvus.io/docs/decay-ranker-overview.md
28+
// https://milvus.io/docs/model-ranker-overview.md
29+
// So we have to inherit the BaseRanker from Function, this change will lead to uncomfortable issues with
30+
// RRFRanker/WeightedRanker in some users client code. We will mention it in release note.
31+
@SuperBuilder
32+
public class BaseRanker extends CreateCollectionReq.Function {
33+
public FunctionType getFunctionType() {
34+
return FunctionType.RERANK;
35+
}
2636
}

sdk-core/src/main/java/io/milvus/v2/service/vector/request/ranker/RRFRanker.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,21 @@
2020
package io.milvus.v2.service.vector.request.ranker;
2121

2222
import com.google.gson.JsonObject;
23+
import lombok.Builder;
24+
import lombok.experimental.SuperBuilder;
2325

2426
import java.util.HashMap;
2527
import java.util.Map;
2628

2729
/**
2830
* The RRF reranking strategy, which merges results from multiple searches, favoring items that consistently appear.
2931
*/
32+
@SuperBuilder
3033
public class RRFRanker extends BaseRanker {
34+
@Builder.Default
3135
private int k = 60;
3236

33-
public RRFRanker(int k) {
34-
this.k = k;
35-
}
36-
37-
@Override
38-
public Map<String, String> getProperties() {
37+
public Map<String, String> getParams() {
3938
JsonObject params = new JsonObject();
4039
params.addProperty("k", this.k);
4140

sdk-core/src/main/java/io/milvus/v2/service/vector/request/ranker/WeightedRanker.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121

2222
import com.google.gson.JsonObject;
2323
import io.milvus.common.utils.JsonUtils;
24+
import lombok.Builder;
25+
import lombok.experimental.SuperBuilder;
2426

27+
import java.util.ArrayList;
2528
import java.util.HashMap;
2629
import java.util.List;
2730
import java.util.Map;
@@ -30,15 +33,12 @@
3033
* The Average Weighted Scoring reranking strategy, which prioritizes vectors based on relevance,
3134
* averaging their significance.
3235
*/
36+
@SuperBuilder
3337
public class WeightedRanker extends BaseRanker {
34-
private List<Float> weights;
38+
@Builder.Default
39+
private List<Float> weights = new ArrayList<>();
3540

36-
public WeightedRanker(List<Float> weights) {
37-
this.weights = weights;
38-
}
39-
40-
@Override
41-
public Map<String, String> getProperties() {
41+
public Map<String, String> getParams() {
4242
JsonObject params = new JsonObject();
4343
params.add("weights", JsonUtils.toJsonTree(this.weights).getAsJsonArray());
4444

sdk-core/src/main/java/io/milvus/v2/utils/VectorUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ public HybridSearchRequest ConvertToGrpcHybridSearchRequest(HybridSearchReq requ
479479
}
480480

481481
// topK value is deprecated, always use "limit" to set the topK
482-
Map<String, String> props = ranker.getProperties();
482+
Map<String, String> props = ranker.getParams();
483483
props.put(Constant.LIMIT, String.valueOf(request.getLimit()));
484484
props.put(Constant.ROUND_DECIMAL, String.valueOf(request.getRoundDecimal()));
485485
props.put(Constant.OFFSET, String.valueOf(request.getOffset()));

sdk-core/src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,7 @@ void testHybridSearch() {
10471047
return HybridSearchReq.builder()
10481048
.collectionName(randomCollectionName)
10491049
.searchRequests(searchRequests)
1050-
.ranker(new RRFRanker(20))
1050+
.ranker(RRFRanker.builder().k(20).build())
10511051
.limit(topk)
10521052
.consistencyLevel(ConsistencyLevel.BOUNDED)
10531053
.build();
@@ -2853,7 +2853,7 @@ void testConsistencyLevel() throws InterruptedException {
28532853
.databaseName(dbName)
28542854
.collectionName(randomCollectionName)
28552855
.searchRequests(Collections.singletonList(subReq))
2856-
.ranker(new RRFRanker(20))
2856+
.ranker(RRFRanker.builder().k(20).build())
28572857
.limit(5)
28582858
.build());
28592859
List<List<SearchResp.SearchResult>> oneResult = searchResp.getSearchResults();

0 commit comments

Comments
 (0)