JsonFieldExample.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package io.milvus.v2;
  2. import com.google.gson.Gson;
  3. import com.google.gson.JsonObject;
  4. import io.milvus.v1.CommonUtils;
  5. import io.milvus.v2.client.ConnectConfig;
  6. import io.milvus.v2.client.MilvusClientV2;
  7. import io.milvus.v2.common.ConsistencyLevel;
  8. import io.milvus.v2.common.DataType;
  9. import io.milvus.v2.common.IndexParam;
  10. import io.milvus.v2.service.collection.request.AddFieldReq;
  11. import io.milvus.v2.service.collection.request.CreateCollectionReq;
  12. import io.milvus.v2.service.collection.request.DropCollectionReq;
  13. import io.milvus.v2.service.vector.request.InsertReq;
  14. import io.milvus.v2.service.vector.request.QueryReq;
  15. import io.milvus.v2.service.vector.response.QueryResp;
  16. import java.util.*;
  17. public class JsonFieldExample {
  18. private static final String COLLECTION_NAME = "java_sdk_example_json_v2";
  19. private static final String ID_FIELD = "id";
  20. private static final String VECTOR_FIELD = "vector";
  21. private static final String JSON_FIELD = "metadata";
  22. private static final Integer VECTOR_DIM = 128;
  23. private static void queryWithExpr(MilvusClientV2 client, String expr) {
  24. QueryResp queryRet = client.query(QueryReq.builder()
  25. .collectionName(COLLECTION_NAME)
  26. .filter(expr)
  27. .outputFields(Arrays.asList(ID_FIELD, JSON_FIELD))
  28. .build());
  29. System.out.println("\nQuery with expression: " + expr);
  30. List<QueryResp.QueryResult> records = queryRet.getQueryResults();
  31. for (QueryResp.QueryResult record : records) {
  32. System.out.println(record.getEntity());
  33. }
  34. System.out.println("=============================================================");
  35. }
  36. public static void main(String[] args) {
  37. ConnectConfig config = ConnectConfig.builder()
  38. .uri("http://localhost:19530")
  39. .build();
  40. MilvusClientV2 client = new MilvusClientV2(config);
  41. // Drop collection if exists
  42. client.dropCollection(DropCollectionReq.builder()
  43. .collectionName(COLLECTION_NAME)
  44. .build());
  45. // Create collection
  46. CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
  47. .build();
  48. collectionSchema.addField(AddFieldReq.builder()
  49. .fieldName(ID_FIELD)
  50. .dataType(DataType.Int64)
  51. .isPrimaryKey(Boolean.TRUE)
  52. .build());
  53. collectionSchema.addField(AddFieldReq.builder()
  54. .fieldName(VECTOR_FIELD)
  55. .dataType(DataType.FloatVector)
  56. .dimension(VECTOR_DIM)
  57. .build());
  58. collectionSchema.addField(AddFieldReq.builder()
  59. .fieldName(JSON_FIELD)
  60. .dataType(DataType.JSON)
  61. .build());
  62. List<IndexParam> indexes = new ArrayList<>();
  63. indexes.add(IndexParam.builder()
  64. .fieldName(VECTOR_FIELD)
  65. .indexType(IndexParam.IndexType.FLAT)
  66. .metricType(IndexParam.MetricType.COSINE)
  67. .build());
  68. CreateCollectionReq requestCreate = CreateCollectionReq.builder()
  69. .collectionName(COLLECTION_NAME)
  70. .collectionSchema(collectionSchema)
  71. .indexParams(indexes)
  72. .consistencyLevel(ConsistencyLevel.BOUNDED)
  73. .build();
  74. client.createCollection(requestCreate);
  75. System.out.println("Collection created");
  76. // Insert rows
  77. Gson gson = new Gson();
  78. for (int i = 0; i < 100; i++) {
  79. JsonObject row = new JsonObject();
  80. row.addProperty(ID_FIELD, i);
  81. row.add(VECTOR_FIELD, gson.toJsonTree(CommonUtils.generateFloatVector(VECTOR_DIM)));
  82. JsonObject metadata = new JsonObject();
  83. metadata.addProperty("path", String.format("\\root/abc/path%d", i));
  84. metadata.addProperty("size", i);
  85. if (i%7 == 0) {
  86. metadata.addProperty("special", true);
  87. }
  88. metadata.add("flags", gson.toJsonTree(Arrays.asList(i, i + 1, i + 2)));
  89. row.add(JSON_FIELD, metadata);
  90. System.out.println(metadata);
  91. client.insert(InsertReq.builder()
  92. .collectionName(COLLECTION_NAME)
  93. .data(Collections.singletonList(row))
  94. .build());
  95. }
  96. // Get row count, set ConsistencyLevel.STRONG to sync the data to query node so that data is visible
  97. QueryResp countR = client.query(QueryReq.builder()
  98. .collectionName(COLLECTION_NAME)
  99. .filter("")
  100. .outputFields(Collections.singletonList("count(*)"))
  101. .consistencyLevel(ConsistencyLevel.STRONG)
  102. .build());
  103. System.out.printf("%d rows persisted\n", (long)countR.getQueryResults().get(0).getEntity().get("count(*)"));
  104. // Query by filtering JSON
  105. queryWithExpr(client, "exists metadata[\"special\"]");
  106. queryWithExpr(client, "metadata[\"size\"] < 5");
  107. queryWithExpr(client, "metadata[\"size\"] in [4, 5, 6]");
  108. queryWithExpr(client, "JSON_CONTAINS(metadata[\"flags\"], 9)");
  109. queryWithExpr(client, "JSON_CONTAINS_ANY(metadata[\"flags\"], [8, 9, 10])");
  110. queryWithExpr(client, "JSON_CONTAINS_ALL(metadata[\"flags\"], [8, 9, 10])");
  111. client.close();
  112. }
  113. }