Browse Source

Fix a bug of V2 that dynamic values not inserted (#1210)

Signed-off-by: yhmo <yihua.mo@zilliz.com>
groot 7 months ago
parent
commit
90b25cd0d4

+ 1 - 0
src/main/java/io/milvus/v2/utils/SchemaUtils.java

@@ -112,6 +112,7 @@ public class SchemaUtils {
 
 
     public static CreateCollectionReq.CollectionSchema convertFromGrpcCollectionSchema(CollectionSchema schema) {
     public static CreateCollectionReq.CollectionSchema convertFromGrpcCollectionSchema(CollectionSchema schema) {
         CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
         CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
+                .enableDynamicField(schema.getEnableDynamicField())
                 .build();
                 .build();
         List<CreateCollectionReq.FieldSchema> fieldSchemas = new ArrayList<>();
         List<CreateCollectionReq.FieldSchema> fieldSchemas = new ArrayList<>();
         for (FieldSchema fieldSchema : schema.getFieldsList()) {
         for (FieldSchema fieldSchema : schema.getFieldsList()) {

+ 58 - 0
src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java

@@ -1978,4 +1978,62 @@ class MilvusClientV2DockerTest {
             System.out.println(result);
             System.out.println(result);
         }
         }
     }
     }
+
+    @Test
+    void testDynamicField() {
+        String collectionName = generator.generate(10);
+
+        client.createCollection(CreateCollectionReq.builder()
+                .collectionName(collectionName)
+                .dimension(DIMENSION)
+                .build());
+
+        List<JsonObject> rows = new ArrayList<>();
+        Gson gson = new Gson();
+        for (int i = 0; i < 100; i++) {
+            JsonObject row = new JsonObject();
+            row.addProperty("id", i);
+            row.add("vector", gson.toJsonTree(utils.generateFloatVector()));
+            row.addProperty(String.format("dynamic_%d", i), "this is dynamic value"); // this value is stored in dynamic field
+            rows.add(row);
+        }
+        InsertResp insertR = client.insert(InsertReq.builder()
+                .collectionName(collectionName)
+                .data(rows)
+                .build());
+
+        // query
+        QueryResp countR = client.query(QueryReq.builder()
+                .collectionName(collectionName)
+                .filter("")
+                .outputFields(Collections.singletonList("count(*)"))
+                .consistencyLevel(ConsistencyLevel.STRONG)
+                .build());
+        Assertions.assertEquals(100L, (long)countR.getQueryResults().get(0).getEntity().get("count(*)"));
+
+        GetResp getR = client.get(GetReq.builder()
+                .collectionName(collectionName)
+                .ids(Collections.singletonList(50L))
+                .outputFields(Collections.singletonList("*"))
+                .build());
+        Assertions.assertEquals(1, getR.getGetResults().size());
+        QueryResp.QueryResult queryR = getR.getGetResults().get(0);
+        Assertions.assertTrue(queryR.getEntity().containsKey("dynamic_50"));
+        Assertions.assertEquals("this is dynamic value", queryR.getEntity().get("dynamic_50"));
+
+        // search
+        SearchResp searchR = client.search(SearchReq.builder()
+                .collectionName(collectionName)
+                .data(Collections.singletonList(new FloatVec(utils.generateFloatVector())))
+                .filter("id == 10")
+                .topK(10)
+                .outputFields(Collections.singletonList("dynamic_10"))
+                .build());
+        List<List<SearchResp.SearchResult>> searchResults = searchR.getSearchResults();
+        Assertions.assertEquals(1, searchResults.size());
+        Assertions.assertEquals(1, searchResults.get(0).size());
+        SearchResp.SearchResult r = searchResults.get(0).get(0);
+        Assertions.assertTrue(r.getEntity().containsKey("dynamic_10"));
+        Assertions.assertEquals("this is dynamic value", r.getEntity().get("dynamic_10"));
+    }
 }
 }