Explorar o código

make search page compatible with milvus 2.3.x (#537)

Signed-off-by: ryjiang <jiangruiyi@gmail.com>
ryjiang hai 1 ano
pai
achega
d595cd4bd6
Modificáronse 2 ficheiros con 28 adicións e 2 borrados
  1. 26 2
      server/src/collections/collections.service.ts
  2. 2 0
      server/src/utils/Helper.ts

+ 26 - 2
server/src/collections/collections.service.ts

@@ -26,6 +26,8 @@ import {
   DescribeIndexReq,
   DropIndexReq,
   DataType,
+  HybridSearchReq,
+  SearchSimpleReq,
 } from '@zilliz/milvus2-sdk-node';
 import { Parser } from '@json2csv/plainjs';
 import {
@@ -40,6 +42,7 @@ import {
   SimpleQueue,
   MIN_INT64,
   VectorTypes,
+  cloneObj,
 } from '../utils';
 import { QueryDto, ImportSampleDto, GetReplicasDto } from './dto';
 import {
@@ -236,10 +239,31 @@ export class CollectionsService {
     return res;
   }
 
-  async vectorSearch(clientId: string, data: SearchReq) {
+  async vectorSearch(
+    clientId: string,
+    data: HybridSearchReq | SearchSimpleReq
+  ) {
     const { milvusClient } = clientCache.get(clientId);
     const now = Date.now();
-    const res = await milvusClient.search(data);
+    const searchParams = data as HybridSearchReq;
+    const isHybrid = searchParams.data.length > 1;
+    const singleSearchParams = cloneObj(data) as SearchSimpleReq;
+
+    // for 2.3.x milvus
+    if (searchParams.data.length == 1) {
+      delete singleSearchParams.data;
+      delete singleSearchParams.params;
+
+      if (Object.keys(searchParams.data[0].params).length > 0) {
+        singleSearchParams.params = searchParams.data[0].params;
+      }
+      singleSearchParams.data = searchParams.data[0].data;
+      singleSearchParams.anns_field = searchParams.data[0].anns_field;
+    }
+
+    const res = await milvusClient.search(
+      isHybrid ? searchParams : singleSearchParams
+    );
     const after = Date.now();
 
     throwErrorFromSDK(res.status);

+ 2 - 0
server/src/utils/Helper.ts

@@ -168,3 +168,5 @@ export const getKeyValueListFromJsonString = (json: string): KeyValuePair[] => {
     throw err;
   }
 };
+
+export const cloneObj = (obj: any) => JSON.parse(JSON.stringify(obj));