浏览代码

Add new index types (#839)

Add group by field for search

Signed-off-by: yhmo <yihua.mo@zilliz.com>
groot 1 年之前
父节点
当前提交
bd80adccb5

+ 1 - 0
src/main/java/io/milvus/param/Constant.java

@@ -31,6 +31,7 @@ public class Constant {
     public static final String ARRAY_MAX_CAPACITY = "max_capacity";
     public static final String TOP_K = "topk";
     public static final String IGNORE_GROWING = "ignore_growing";
+    public static final String GROUP_BY_FIELD = "group_by_field";
     public static final String INDEX_TYPE = "index_type";
     public static final String METRIC_TYPE = "metric_type";
     public static final String ROUND_DECIMAL = "round_decimal";

+ 4 - 1
src/main/java/io/milvus/param/IndexType.java

@@ -40,6 +40,8 @@ public enum IndexType {
     // GPU indexes only for float vectors
     GPU_IVF_FLAT(50),
     GPU_IVF_PQ(51),
+    GPU_BRUTE_FORCE(52),
+    GPU_CAGRA(53),
 
     // Only supported for binary vectors
     BIN_FLAT(80),
@@ -48,7 +50,8 @@ public enum IndexType {
     // Only for varchar type field
     TRIE("Trie", 100),
     // Only for scalar type field
-    STL_SORT(200),
+    STL_SORT(200), // only for numeric type field
+    INVERTED(201), // works for all scalar fields except JSON type field
 
     // Only for sparse vectors
     SPARSE_INVERTED_INDEX(300),

+ 8 - 0
src/main/java/io/milvus/param/ParamUtils.java

@@ -536,6 +536,14 @@ public class ParamUtils {
                             .build());
         }
 
+        if (!StringUtils.isEmpty(requestParam.getGroupByFieldName())) {
+            builder.addSearchParams(
+                    KeyValuePair.newBuilder()
+                            .setKey(Constant.GROUP_BY_FIELD)
+                            .setValue(requestParam.getGroupByFieldName())
+                            .build());
+        }
+
         if (null != requestParam.getParams() && !requestParam.getParams().isEmpty()) {
             try {
             Map<String, Object> paramMap = JacksonUtils.fromJson(requestParam.getParams(),Map.class);

+ 14 - 0
src/main/java/io/milvus/param/dml/SearchParam.java

@@ -57,6 +57,7 @@ public class SearchParam {
     private final Long gracefulTime;
     private final ConsistencyLevelEnum consistencyLevel;
     private final boolean ignoreGrowing;
+    private final String groupByFieldName;
 
     private SearchParam(@NonNull Builder builder) {
         this.databaseName = builder.databaseName;
@@ -76,6 +77,7 @@ public class SearchParam {
         this.gracefulTime = builder.gracefulTime;
         this.consistencyLevel = builder.consistencyLevel;
         this.ignoreGrowing = builder.ignoreGrowing;
+        this.groupByFieldName = builder.groupByFieldName;
     }
 
     public static Builder newBuilder() {
@@ -103,6 +105,7 @@ public class SearchParam {
         private Long gracefulTime = 5000L;
         private ConsistencyLevelEnum consistencyLevel = null;
         private Boolean ignoreGrowing = Boolean.FALSE;
+        private String groupByFieldName;
 
         Builder() {
         }
@@ -285,6 +288,17 @@ public class SearchParam {
             return this;
         }
 
+        /**
+         * Sets field name to do grouping.
+         *
+         * @param groupByFieldName field name to do grouping
+         * @return <code>Builder</code>
+         */
+        public Builder withGroupByFieldName(@NonNull String groupByFieldName) {
+            this.groupByFieldName = groupByFieldName;
+            return this;
+        }
+
         /**
          * Verifies parameters and creates a new {@link SearchParam} instance.
          *