Skip to content

Commit 2e821a8

Browse files
authored
Use cached collection schema for query by ids (#1518)
Signed-off-by: yhmo <[email protected]>
1 parent bec779e commit 2e821a8

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

docker-compose.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ version: '3.5'
33
services:
44
etcd:
55
container_name: milvus-javasdk-test-etcd
6-
image: quay.io/coreos/etcd:v3.5.5
6+
image: quay.io/coreos/etcd:v3.5.18
77
volumes:
88
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
99
command: etcd -listen-peer-urls=http://127.0.0.1:2380 -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 -initial-advertise-peer-urls=http://127.0.0.1:2380 --initial-cluster default=http://127.0.0.1:2380 --data-dir /etcd
@@ -14,7 +14,7 @@ services:
1414

1515
minio:
1616
container_name: milvus-javasdk-test-minio
17-
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
17+
image: minio/minio:RELEASE.2024-05-28T17-19-04Z
1818
ports:
1919
- "9000:9000"
2020
- "9001:9001"
@@ -48,7 +48,7 @@ services:
4848

4949
etcdslave:
5050
container_name: milvus-javasdk-test-etcd-slave
51-
image: quay.io/coreos/etcd:v3.5.5
51+
image: quay.io/coreos/etcd:v3.5.18
5252
volumes:
5353
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd-slave:/etcd
5454
command: etcd -listen-peer-urls=http://127.0.0.1:2380 -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 -initial-advertise-peer-urls=http://127.0.0.1:2380 --initial-cluster default=http://127.0.0.1:2380 --data-dir /etcd
@@ -59,7 +59,7 @@ services:
5959

6060
minioslave:
6161
container_name: milvus-javasdk-test-minio-slave
62-
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
62+
image: minio/minio:RELEASE.2024-05-28T17-19-04Z
6363
ports:
6464
- "19000:9000"
6565
- "19001:9001"

sdk-core/src/main/java/io/milvus/v2/service/vector/VectorService.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,9 @@ public UpsertResp upsert(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStu
220220
}
221221

222222
public QueryResp query(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub, QueryReq request) {
223-
String title = String.format("QueryRequest collectionName:%s, databaseName:%s", request.getCollectionName(), request.getDatabaseName());
223+
String dbName = request.getDatabaseName();
224+
String collectionName = request.getCollectionName();
225+
String title = String.format("QueryRequest collectionName:%s, databaseName:%s", collectionName, dbName);
224226
if (request.getFilter() == null && request.getIds() == null) {
225227
throw new MilvusClientException(ErrorCode.INVALID_PARAMS, "filter and ids can't be null at the same time");
226228
} else if (request.getFilter() != null && request.getIds() != null) {
@@ -229,9 +231,19 @@ public QueryResp query(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub,
229231

230232

231233
if (request.getIds() != null && request.getFilter() == null) {
232-
DescribeCollectionReq descReq = DescribeCollectionReq.builder().databaseName(request.getDatabaseName()).collectionName(request.getCollectionName()).build();
233-
DescribeCollectionResp descResp = collectionService.describeCollection(blockingStub, descReq);
234-
request.setFilter(vectorUtils.getExprById(descResp.getPrimaryFieldName(), request.getIds()));
234+
DescribeCollectionResponse descResp = getCollectionInfo(blockingStub, dbName, collectionName, false);
235+
String primaryKeyName = "";
236+
List<FieldSchema> fields = descResp.getSchema().getFieldsList();
237+
for (FieldSchema field : fields) {
238+
if (field.getIsPrimaryKey()) {
239+
primaryKeyName = field.getName();
240+
break;
241+
}
242+
}
243+
if (StringUtils.isEmpty(primaryKeyName)) {
244+
throw new MilvusClientException(ErrorCode.SERVER_ERROR, "cannot find the primary key field in collection schema");
245+
}
246+
request.setFilter(vectorUtils.getExprById(primaryKeyName, request.getIds()));
235247
}
236248

237249
// reset the db name so that the timestamp cache can set correct key for this collection
@@ -287,15 +299,17 @@ public SearchResp hybridSearch(MilvusServiceGrpc.MilvusServiceBlockingStub block
287299

288300
public QueryIterator queryIterator(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub,
289301
QueryIteratorReq request) {
290-
DescribeCollectionResponse descResp = describeCollection(blockingStub, request.getDatabaseName(), request.getCollectionName());
302+
DescribeCollectionResponse descResp = getCollectionInfo(blockingStub, request.getDatabaseName(),
303+
request.getCollectionName(), false);
291304
DescribeCollectionResp respR = convertUtils.convertDescCollectionResp(descResp);
292305
CreateCollectionReq.FieldSchema pkField = respR.getCollectionSchema().getField(respR.getPrimaryFieldName());
293306
return new QueryIterator(request, blockingStub, pkField);
294307
}
295308

296309
public SearchIterator searchIterator(MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub,
297310
SearchIteratorReq request) {
298-
DescribeCollectionResponse descResp = describeCollection(blockingStub, request.getDatabaseName(), request.getCollectionName());
311+
DescribeCollectionResponse descResp = getCollectionInfo(blockingStub, request.getDatabaseName(),
312+
request.getCollectionName(), false);
299313
DescribeCollectionResp respR = convertUtils.convertDescCollectionResp(descResp);
300314
CreateCollectionReq.FieldSchema pkField = respR.getCollectionSchema().getField(respR.getPrimaryFieldName());
301315
return new SearchIterator(request, blockingStub, pkField);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1173,7 +1173,7 @@ void testDeleteUpsert() {
11731173
// verify
11741174
QueryResp queryResp = client.query(QueryReq.builder()
11751175
.collectionName(randomCollectionName)
1176-
.filter("pk == \"pk_2\" or pk == \"pk_5\"")
1176+
.ids(Arrays.asList("pk_2", "pk_5"))
11771177
.outputFields(Collections.singletonList("*"))
11781178
.build());
11791179
List<QueryResp.QueryResult> queryResults = queryResp.getQueryResults();

0 commit comments

Comments
 (0)