Skip to content

Commit cadbaeb

Browse files
authored
Reformat SearchResult/IDScore print content to show primary key (#1420)
Signed-off-by: yhmo <yihua.mo@zilliz.com>
1 parent e8f9877 commit cadbaeb

16 files changed

Lines changed: 90 additions & 60 deletions

examples/src/main/java/io/milvus/v1/BinaryVectorExample.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@
3838

3939
public class BinaryVectorExample {
4040
private static final String COLLECTION_NAME = "java_sdk_example_binary_vector_v1";
41-
private static final String ID_FIELD = "id";
41+
private static final String ID_FIELD = "pk";
4242
private static final String VECTOR_FIELD = "vector";
4343

44-
private static final Integer VECTOR_DIM = 512;
44+
private static final Integer VECTOR_DIM = 128;
4545

4646

4747
public static void main(String[] args) {
@@ -152,6 +152,8 @@ public static void main(String[] args) {
152152
Random ran = new Random();
153153
int k = ran.nextInt(rowCount);
154154
ByteBuffer targetVector = vectors.get(k);
155+
System.out.printf("\nANN search for vector ID=%d:\n", k);
156+
CommonUtils.printBinaryVector(targetVector);
155157
R<SearchResults> searchRet = milvusClient.search(SearchParam.newBuilder()
156158
.withCollectionName(COLLECTION_NAME)
157159
.withMetricType(MetricType.HAMMING)
@@ -169,13 +171,9 @@ public static void main(String[] args) {
169171
List<SearchResultsWrapper.IDScore> scores = resultsWrapper.getIDScore(0);
170172
System.out.printf("The result of No.%d target vector:\n", i);
171173
for (SearchResultsWrapper.IDScore score : scores) {
172-
System.out.printf("ID: %d, Score: %f, Vector: ", score.getLongID(), score.getScore());
174+
System.out.println(score);
173175
ByteBuffer vector = (ByteBuffer)score.get(VECTOR_FIELD);
174-
vector.rewind();
175-
while (vector.hasRemaining()) {
176-
System.out.print(Integer.toBinaryString(vector.get()));
177-
}
178-
System.out.println();
176+
CommonUtils.printBinaryVector(vector);
179177
}
180178
if (scores.get(0).getLongID() != k) {
181179
throw new RuntimeException(String.format("The top1 ID %d is not equal to target vector's ID %d",
@@ -188,7 +186,7 @@ public static void main(String[] args) {
188186
int n = 99;
189187
R<QueryResults> queryR = milvusClient.query(QueryParam.newBuilder()
190188
.withCollectionName(COLLECTION_NAME)
191-
.withExpr(String.format("id == %d", n))
189+
.withExpr(String.format("%s == %d", ID_FIELD, n))
192190
.addOutField(VECTOR_FIELD)
193191
.build());
194192
CommonUtils.handleResponseStatus(queryR);

examples/src/main/java/io/milvus/v1/CommonUtils.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,15 @@ public static List<ByteBuffer> generateBinaryVectors(int dimension, int count) {
9696
return vectors;
9797
}
9898

99+
public static void printBinaryVector(ByteBuffer vector) {
100+
vector.rewind();
101+
while (vector.hasRemaining()) {
102+
String byteStr = String.format("%8s", Integer.toBinaryString(vector.get())).replace(' ', '0');
103+
System.out.print(byteStr);
104+
}
105+
System.out.println();
106+
}
107+
99108
/////////////////////////////////////////////////////////////////////////////////////////////////////
100109
public static TBfloat16 genTensorflowBF16Vector(int dimension) {
101110
Random ran = new Random();
@@ -135,7 +144,7 @@ public static List<ByteBuffer> encodeTensorBF16Vectors(List<TBfloat16> vectors)
135144
return buffers;
136145
}
137146

138-
public static TBfloat16 decodeTensorBF16Vector(ByteBuffer buf) {
147+
public static TBfloat16 decodeBF16VectorToTensor(ByteBuffer buf) {
139148
if (buf.limit()%2 != 0) {
140149
return null;
141150
}
@@ -144,6 +153,15 @@ public static TBfloat16 decodeTensorBF16Vector(ByteBuffer buf) {
144153
return Tensor.of(TBfloat16.class, Shape.of(dim), bf);
145154
}
146155

156+
public static List<Float> decodeBF16VectorToFloat(ByteBuffer buf) {
157+
List<Float> vector = new ArrayList<>();
158+
TBfloat16 tf = decodeBF16VectorToTensor(buf);
159+
for (long i = 0; i < tf.size(); i++) {
160+
vector.add(tf.getFloat(i));
161+
}
162+
return vector;
163+
}
164+
147165

148166
public static TFloat16 genTensorflowFP16Vector(int dimension) {
149167
Random ran = new Random();
@@ -183,7 +201,7 @@ public static List<ByteBuffer> encodeTensorFP16Vectors(List<TFloat16> vectors) {
183201
return buffers;
184202
}
185203

186-
public static TFloat16 decodeTensorFP16Vector(ByteBuffer buf) {
204+
public static TFloat16 decodeFP16VectorToTensor(ByteBuffer buf) {
187205
if (buf.limit()%2 != 0) {
188206
return null;
189207
}
@@ -192,6 +210,15 @@ public static TFloat16 decodeTensorFP16Vector(ByteBuffer buf) {
192210
return Tensor.of(TFloat16.class, Shape.of(dim), bf);
193211
}
194212

213+
public static List<Float> decodeFP16VectorToFloat(ByteBuffer buf) {
214+
List<Float> vector = new ArrayList<>();
215+
TFloat16 tf = decodeFP16VectorToTensor(buf);
216+
for (long i = 0; i < tf.size(); i++) {
217+
vector.add(tf.getFloat(i));
218+
}
219+
return vector;
220+
}
221+
195222
/////////////////////////////////////////////////////////////////////////////////////////////////////
196223
public static ByteBuffer encodeFloat16Vector(List<Float> originVector, boolean bfloat16) {
197224
if (bfloat16) {

examples/src/main/java/io/milvus/v1/Float16VectorExample.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,6 @@ private static void testFloat16(boolean bfloat16) {
201201
SearchResultsWrapper resultsWrapper = new SearchResultsWrapper(searchRet.getData().getResults());
202202
List<SearchResultsWrapper.IDScore> scores = resultsWrapper.getIDScore(0);
203203
System.out.printf("The result of No.%d target vector:\n", i);
204-
for (SearchResultsWrapper.IDScore score : scores) {
205-
System.out.println(score);
206-
}
207204

208205
SearchResultsWrapper.IDScore firstScore = scores.get(0);
209206
if (firstScore.getLongID() != k) {
@@ -223,6 +220,9 @@ private static void testFloat16(boolean bfloat16) {
223220
throw new RuntimeException(String.format("The output vector is not equal to original vector: ID %d", k));
224221
}
225222
}
223+
System.out.println("\nTarget vector: " + originVector);
224+
System.out.println("Top0 result: " + firstScore);
225+
System.out.println("Top0 result vector: " + outputVector);
226226
}
227227
System.out.println("Search result is correct");
228228

@@ -316,19 +316,13 @@ private static void testTensorflowFloat16(boolean bfloat16) {
316316
throw new RuntimeException("The query result is incorrect");
317317
}
318318

319-
List<Float> vector = new ArrayList<>();
319+
List<Float> outVector;
320320
if (bfloat16) {
321-
TBfloat16 tf = CommonUtils.decodeTensorBF16Vector(outputBuf);
322-
for (long i = 0; i < tf.size(); i++) {
323-
vector.add(tf.getFloat(i));
324-
}
321+
outVector = CommonUtils.decodeBF16VectorToFloat(outputBuf);
325322
} else {
326-
TFloat16 tf = CommonUtils.decodeTensorFP16Vector(outputBuf);
327-
for (long i = 0; i < tf.size(); i++) {
328-
vector.add(tf.getFloat(i));
329-
}
323+
outVector = CommonUtils.decodeFP16VectorToFloat(outputBuf);
330324
}
331-
System.out.println(vector);
325+
System.out.println("Output vector: " + outVector);
332326
System.out.println("Query result is correct");
333327

334328
// drop the collection if you don't need the collection anymore

examples/src/main/java/io/milvus/v1/GeneralExample.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,9 @@ private R<SearchResults> searchFace(String expr) {
349349
for (int i = 0; i < vectors.size(); ++i) {
350350
System.out.println("Search result of No." + i);
351351
List<SearchResultsWrapper.IDScore> scores = wrapper.getIDScore(i);
352-
System.out.println(scores);
353-
System.out.println("Output field data for No." + i);
354-
System.out.println(wrapper.getFieldData(AGE_FIELD, i));
352+
for (SearchResultsWrapper.IDScore score : scores) {
353+
System.out.println(score);
354+
}
355355
}
356356

357357
return response;

examples/src/main/java/io/milvus/v1/SparseVectorExample.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ public static void main(String[] args) {
149149
Random ran = new Random();
150150
int k = ran.nextInt(rowCount);
151151
SortedMap<Long, Float> targetVector = vectors.get(k);
152+
System.out.println("\nTarget vector: " + targetVector);
152153
R<SearchResults> searchRet = milvusClient.search(SearchParam.newBuilder()
153154
.withCollectionName(COLLECTION_NAME)
154155
.withMetricType(MetricType.IP)

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@
4242

4343
public class BinaryVectorExample {
4444
private static final String COLLECTION_NAME = "java_sdk_example_binary_vector_v2";
45-
private static final String ID_FIELD = "id";
45+
private static final String ID_FIELD = "pk";
4646
private static final String VECTOR_FIELD = "vector";
4747

48-
private static final Integer VECTOR_DIM = 512;
48+
private static final Integer VECTOR_DIM = 128;
4949

5050

5151
public static void main(String[] args) {
@@ -126,6 +126,8 @@ public static void main(String[] args) {
126126
Random ran = new Random();
127127
int k = ran.nextInt(rowCount);
128128
ByteBuffer targetVector = vectors.get(k);
129+
System.out.printf("\nANN search for vector ID=%d:\n", k);
130+
CommonUtils.printBinaryVector(targetVector);
129131
Map<String,Object> params = new HashMap<>();
130132
params.put("nprobe",16);
131133
SearchResp searchResp = client.search(SearchReq.builder()
@@ -141,16 +143,11 @@ public static void main(String[] args) {
141143
// Here we only input one vector to search, get the result of No.0 vector to check
142144
List<List<SearchResp.SearchResult>> searchResults = searchResp.getSearchResults();
143145
List<SearchResp.SearchResult> results = searchResults.get(0);
144-
System.out.printf("The result of No.%d target vector:\n", i);
146+
System.out.printf("The result of No.%d target vector, ID=%d:\n", i, k);
145147
for (SearchResp.SearchResult result : results) {
146-
System.out.println(result.getEntity());
147-
System.out.printf("ID: %d, Score: %f, Vector: ", result.getId(), result.getScore());
148+
System.out.println(result);
148149
ByteBuffer vector = (ByteBuffer) result.getEntity().get(VECTOR_FIELD);
149-
vector.rewind();
150-
while (vector.hasRemaining()) {
151-
System.out.print(Integer.toBinaryString(vector.get()));
152-
}
153-
System.out.println();
150+
CommonUtils.printBinaryVector(vector);
154151
}
155152

156153
SearchResp.SearchResult firstResult = results.get(0);
@@ -165,7 +162,7 @@ public static void main(String[] args) {
165162
int n = 99;
166163
QueryResp queryResp = client.query(QueryReq.builder()
167164
.collectionName(COLLECTION_NAME)
168-
.filter(String.format("id == %d", n))
165+
.filter(String.format("%s == %d", ID_FIELD, n))
169166
.outputFields(Collections.singletonList(VECTOR_FIELD))
170167
.build());
171168

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,17 +162,22 @@ private static void searchVectors(List<Long> taargetIDs, List<BaseVector> target
162162
}
163163
Map<String, Object> entity = topResult.getEntity();
164164
ByteBuffer vectorBuf = (ByteBuffer) entity.get(vectorFieldName);
165-
if (!vectorBuf.equals(targetVectors.get(i).getData())) {
165+
ByteBuffer targetVectorBuf = (ByteBuffer)targetVectors.get(i).getData();
166+
if (!vectorBuf.equals(targetVectorBuf)) {
166167
throw new RuntimeException("The top1 output vector is incorrect");
167168
}
169+
List<Float> decodedTargetVector = CommonUtils.decodeFloat16Vector(targetVectorBuf,
170+
BF16_VECTOR_FIELD.equals(vectorFieldName));
168171
// The method for converting float16 vector to float32 vector can be found in
169172
// CommonUtils.
170173
List<Float> decodedFpVector = CommonUtils.decodeFloat16Vector(vectorBuf,
171174
BF16_VECTOR_FIELD.equals(vectorFieldName));
172175
if (decodedFpVector.size() != VECTOR_DIM) {
173176
throw new RuntimeException("The decoded vector dimension is incorrect");
174177
}
175-
System.out.println(results.get(0));
178+
System.out.println("\nTarget vector: " + decodedTargetVector);
179+
System.out.println("Top0 result: " + topResult);
180+
System.out.println("Top0 result vector: " + decodedFpVector);
176181
}
177182
System.out.println("Search result of " + vectorFieldName + " is correct");
178183
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ private static void searchByText(MilvusClientV2 client, String text) {
3838
List<List<SearchResp.SearchResult>> searchResults = searchResp.getSearchResults();
3939
for (List<SearchResp.SearchResult> results : searchResults) {
4040
for (SearchResp.SearchResult result : results) {
41-
System.out.printf("ID: %d, Score: %f, %s\n", (long)result.getId(), result.getScore(), result.getEntity().toString());
41+
System.out.println(result);
4242
}
4343
}
4444
System.out.println("=============================================================");

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ private static void searchFace(String filter) {
205205
for (List<SearchResp.SearchResult> results : searchResults) {
206206
System.out.println("Search result of No." + i++);
207207
for (SearchResp.SearchResult result : results) {
208-
System.out.printf("ID: %s, Score: %f, %s\n", result.getId(), result.getScore(), result.getEntity().toString());
208+
System.out.println(result);
209209
}
210210
}
211211
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ private void hybridSearch() {
223223
System.out.printf("============= Search result of No.%d vector =============\n", i);
224224
List<SearchResp.SearchResult> results = searchResults.get(i);
225225
for (SearchResp.SearchResult result : results) {
226-
System.out.printf("{id: %d, score: %f}%n", result.getId(), result.getScore());
226+
System.out.println(result);
227227
}
228228
}
229229
}

0 commit comments

Comments
 (0)