@@ -355,6 +355,7 @@ def retrieve_online_documents(
355355 # Convert the embedding to a binary format instead of using SerializeToString()
356356 query_embedding_bin = serialize_f32 (embedding , config .online_store .vector_len )
357357 table_name = _table_id (project , table )
358+ vector_field = _get_vector_field (table )
358359
359360 cur .execute (
360361 f"""
@@ -369,14 +370,15 @@ def retrieve_online_documents(
369370 f"""
370371 INSERT INTO vec_table(rowid, vector_value)
371372 select rowid, vector_value from { table_name }
373+ where feature_name = "{ vector_field } "
372374 """
373375 )
374376 cur .execute (
377+ f"""
378+ CREATE VIRTUAL TABLE IF NOT EXISTS vec_table using vec0(
379+ vector_value float[{ config .online_store .vector_len } ]
380+ );
375381 """
376- INSERT INTO vec_table(rowid, vector_value)
377- VALUES (?, ?)
378- """ ,
379- (0 , query_embedding_bin ),
380382 )
381383
382384 # Have to join this with the {table_name} to get the feature name and entity_key
@@ -473,16 +475,7 @@ def retrieve_online_documents_v2(
473475
474476 query_embedding_bin = serialize_f32 (query , online_store .vector_len ) # type: ignore
475477 table_name = _table_id (config .project , table )
476- vector_fields : List [Field ] = [
477- f for f in table .features if getattr (f , "vector_index" , None )
478- ]
479- assert len (vector_fields ) > 0 , (
480- f"No vector field found, please update feature view = { table .name } to declare a vector field"
481- )
482- assert len (vector_fields ) < 2 , (
483- "Only one vector field is supported, please update feature view = {table.name} to declare one vector field"
484- )
485- vector_field : str = vector_fields [0 ].name
478+ vector_field = _get_vector_field (table )
486479
487480 cur .execute (
488481 f"""
@@ -696,3 +689,20 @@ def update(self):
696689
697690 def teardown (self ):
698691 self .conn .execute (f"DROP TABLE IF EXISTS { self .name } " )
692+
693+
694+ def _get_vector_field (table : FeatureView ) -> str :
695+ """
696+ Get the vector field from the feature view. There can be only one.
697+ """
698+ vector_fields : List [Field ] = [
699+ f for f in table .features if getattr (f , "vector_index" , None )
700+ ]
701+ assert len (vector_fields ) > 0 , (
702+ f"No vector field found, please update feature view = { table .name } to declare a vector field"
703+ )
704+ assert len (vector_fields ) < 2 , (
705+ "Only one vector field is supported, please update feature view = {table.name} to declare one vector field"
706+ )
707+ vector_field : str = vector_fields [0 ].name
708+ return vector_field
0 commit comments