22import json
33from typing import Union , List
44
5- from volcengine .viking_db .common import Data , VectorOrder , ScalarOrder
5+ from volcengine .viking_db .common import MAX_RETRIES , Data , VectorOrder , ScalarOrder
66
77
88class Index (object ):
@@ -30,7 +30,7 @@ def __init__(self, collection_name, index_name, vector_index, scalar_index, stat
3030 # print(col["data"]["primary_key"])
3131 self .primary_key = col ["data" ]["primary_key" ]
3232
33- def search (self , order = None , filter = None , limit = 10 , output_fields = None , partition = "default" , dense_weight = None ):
33+ def search (self , order = None , filter = None , limit = 10 , output_fields = None , partition = "default" , dense_weight = None , retry = False ):
3434 """
3535 Search for vectors or scalars similar to a given vector or scalar.
3636
@@ -51,10 +51,10 @@ def search(self, order=None, filter=None, limit=10, output_fields=None, partitio
5151 if order .vector is not None :
5252 res = self .search_by_vector (order .vector , sparse_vectors = order .sparse_vectors , filter = filter ,
5353 limit = limit ,
54- output_fields = output_fields , partition = partition , dense_weight = dense_weight )
54+ output_fields = output_fields , partition = partition , dense_weight = dense_weight , retry = retry )
5555 elif order .id is not None :
5656 res = self .search_by_id (order .id , filter = filter , limit = limit ,
57- output_fields = output_fields , partition = partition , dense_weight = dense_weight )
57+ output_fields = output_fields , partition = partition , dense_weight = dense_weight , retry = retry )
5858 return res
5959 elif isinstance (order , ScalarOrder ):
6060 search = {}
@@ -66,7 +66,8 @@ def search(self, order=None, filter=None, limit=10, output_fields=None, partitio
6666 search ['filter' ] = filter
6767 params = {"collection_name" : self .collection_name , "index_name" : self .index_name , "search" : search }
6868 # print(params)
69- res = self .viking_db_service .json_exception ("SearchIndex" , {}, json .dumps (params ))
69+ remaining_retries = MAX_RETRIES if retry else 0
70+ res = self .viking_db_service ._retry_request ("SearchIndex" , {}, json .dumps (params ), remaining_retries )
7071 res = json .loads (res )
7172 # print(res["data"])
7273
@@ -91,7 +92,8 @@ def search(self, order=None, filter=None, limit=10, output_fields=None, partitio
9192 if filter is not None :
9293 search ['filter' ] = filter
9394 params = {"collection_name" : self .collection_name , "index_name" : self .index_name , "search" : search }
94- res = self .viking_db_service .json_exception ("SearchIndex" , {}, json .dumps (params ))
95+ remaining_retries = MAX_RETRIES if retry else 0
96+ res = self .viking_db_service ._retry_request ("SearchIndex" , {}, json .dumps (params ), remaining_retries )
9597 res = json .loads (res )
9698
9799 datas = []
@@ -173,7 +175,7 @@ async def async_search(self, order=None, filter=None, limit=10, output_fields=No
173175 # print("==================")
174176 return datas
175177
176- def search_by_id (self , id , filter = None , limit = 10 , output_fields = None , partition = "default" , dense_weight = None ):
178+ def search_by_id (self , id , filter = None , limit = 10 , output_fields = None , partition = "default" , dense_weight = None , retry = False ):
177179 """
178180 Search for vectors similar to a given vector based on its id.
179181
@@ -200,7 +202,8 @@ def search_by_id(self, id, filter=None, limit=10, output_fields=None, partition=
200202 search ['dense_weight' ] = dense_weight
201203 params = {"collection_name" : self .collection_name , "index_name" : self .index_name , "search" : search }
202204 # print(params)
203- res = self .viking_db_service .json_exception ("SearchIndex" , {}, json .dumps (params ))
205+ remaining_retries = MAX_RETRIES if retry else 0
206+ res = self .viking_db_service ._retry_request ("SearchIndex" , {}, json .dumps (params ), remaining_retries )
204207 res = json .loads (res )
205208 # print(res["data"])
206209
@@ -254,7 +257,7 @@ async def async_search_by_id(self, id, filter=None, limit=10, output_fields=None
254257 return datas
255258
256259 def search_by_vector (self , vector , sparse_vectors = None , filter = None , limit = 10 , output_fields = None ,
257- partition = "default" , dense_weight = None ):
260+ partition = "default" , dense_weight = None , retry = False ):
258261 """
259262 Search for vectors similar to a given vector.
260263
@@ -284,7 +287,8 @@ def search_by_vector(self, vector, sparse_vectors=None, filter=None, limit=10, o
284287 search ['dense_weight' ] = dense_weight
285288 params = {"collection_name" : self .collection_name , "index_name" : self .index_name , "search" : search }
286289 # print(params)
287- res = self .viking_db_service .json_exception ("SearchIndex" , {}, json .dumps (params ))
290+ remaining_retries = MAX_RETRIES if retry else 0
291+ res = self .viking_db_service ._retry_request ("SearchIndex" , {}, json .dumps (params ), remaining_retries )
288292 res = json .loads (res )
289293 # print(res["data"])
290294
@@ -338,7 +342,7 @@ async def async_search_by_vector(self, vector, sparse_vectors=None, filter=None,
338342 # print("==================")
339343 return datas
340344
341- def search_by_text (self , text , filter = None , limit = 10 , output_fields = None , partition = "default" , dense_weight = None ):
345+ def search_by_text (self , text , filter = None , limit = 10 , output_fields = None , partition = "default" , dense_weight = None , retry = False ):
342346 """
343347 Search for text similar to a given text.
344348
@@ -364,7 +368,8 @@ def search_by_text(self, text, filter=None, limit=10, output_fields=None, partit
364368 if dense_weight is not None :
365369 search ['dense_weight' ] = dense_weight
366370 params = {"collection_name" : self .collection_name , "index_name" : self .index_name , "search" : search }
367- res = self .viking_db_service .json_exception ("SearchIndex" , {}, json .dumps (params ))
371+ remaining_retries = MAX_RETRIES if retry else 0
372+ res = self .viking_db_service ._retry_request ("SearchIndex" , {}, json .dumps (params ), remaining_retries )
368373 res = json .loads (res )
369374 # print(res["data"])
370375
@@ -429,7 +434,7 @@ def fetch_data(self, id: Union[str, List[str], int, List[int]], output_fields=No
429434 params ["output_fields" ] = output_fields
430435 if partition != "" :
431436 params ["partition" ] = partition
432- res = self .viking_db_service .get_body_exception ("FetchIndexData" , {}, json .dumps (params ))
437+ res = self .viking_db_service ._retry_request ("FetchIndexData" , {}, json .dumps (params ))
433438 res = json .loads (res )
434439 # res["data"]是一个list
435440 # print(res["data"][0]["fields"])
@@ -446,7 +451,7 @@ def fetch_data(self, id: Union[str, List[str], int, List[int]], output_fields=No
446451 params ["output_fields" ] = output_fields
447452 if partition != "" :
448453 params ["partition" ] = partition
449- res = self .viking_db_service .get_body_exception ("FetchIndexData" , {}, json .dumps (params ))
454+ res = self .viking_db_service ._retry_request ("FetchIndexData" , {}, json .dumps (params ))
450455 res = json .loads (res )
451456 # print(res)
452457 for item in res ["data" ]:
0 commit comments