@@ -1831,19 +1831,15 @@ async def get_online_features_async(
18311831
18321832 def retrieve_online_documents (
18331833 self ,
1834- feature : Optional [str ],
18351834 query : Union [str , List [float ]],
18361835 top_k : int ,
1837- features : Optional [ List [str ]] = None ,
1836+ features : List [str ],
18381837 distance_metric : Optional [str ] = "L2" ,
18391838 ) -> OnlineResponse :
18401839 """
18411840 Retrieves the top k closest document features. Note, embeddings are a subset of features.
18421841
18431842 Args:
1844- feature: The list of document features that should be retrieved from the online document store. These features can be
1845- specified either as a list of string document feature references or as a feature service. String feature
1846- references must have format "feature_view:feature", e.g, "document_fv:document_embeddings".
18471843 features: The list of features that should be retrieved from the online store.
18481844 query: The query to retrieve the closest document features for.
18491845 top_k: The number of closest document features to retrieve.
@@ -1853,38 +1849,27 @@ def retrieve_online_documents(
18531849 raise ValueError (
18541850 "Using embedding functionality is not supported for document retrieval. Please embed the query before calling retrieve_online_documents."
18551851 )
1856- feature_list : List [str ] = (
1857- features
1858- if features is not None
1859- else ([feature ] if feature is not None else [])
1860- )
18611852
18621853 (
18631854 available_feature_views ,
18641855 _ ,
18651856 ) = utils ._get_feature_views_to_use (
18661857 registry = self ._registry ,
18671858 project = self .project ,
1868- features = feature_list ,
1859+ features = features ,
18691860 allow_cache = True ,
18701861 hide_dummy_entity = False ,
18711862 )
1872- if feature_list :
1873- feature_view_set = set ()
1874- for _feature in feature_list :
1875- feature_view_name = _feature .split (":" )[0 ]
1876- feature_view = self .get_feature_view (feature_view_name )
1877- feature_view_set .add (feature_view .name )
1878- if len (feature_view_set ) > 1 :
1879- raise ValueError (
1880- "Document retrieval only supports a single feature view."
1881- )
1882- requested_feature = (
1883- feature .split (":" )[1 ] if isinstance (feature , str ) else feature
1884- )
1885- requested_features = [
1886- f .split (":" )[1 ] for f in feature_list if isinstance (f , str ) and ":" in f
1887- ]
1863+ feature_view_set = set ()
1864+ for _feature in features :
1865+ feature_view_name = _feature .split (":" )[0 ]
1866+ feature_view = self .get_feature_view (feature_view_name )
1867+ feature_view_set .add (feature_view .name )
1868+ if len (feature_view_set ) > 1 :
1869+ raise ValueError ("Document retrieval only supports a single feature view." )
1870+ requested_features = [
1871+ f .split (":" )[1 ] for f in features if isinstance (f , str ) and ":" in f
1872+ ]
18881873 requested_feature_view_name = list (feature_view_set )[0 ]
18891874 for feature_view in available_feature_views :
18901875 if feature_view .name == requested_feature_view_name :
@@ -1899,15 +1884,20 @@ def retrieve_online_documents(
18991884 document_features = self ._retrieve_from_online_store (
19001885 provider ,
19011886 requested_feature_view ,
1902- requested_feature ,
19031887 requested_features ,
19041888 query ,
19051889 top_k ,
19061890 distance_metric ,
19071891 )
1892+
19081893 # TODO currently not return the vector value since it is same as feature value, if embedding is supported,
19091894 # the feature value can be raw text before embedded
1910- entity_key_vals = [feature [1 ] for feature in document_features ]
1895+ def _doc_feature (x ):
1896+ return [feature [x ] for feature in document_features ]
1897+
1898+ entity_key_vals , document_feature_vals , document_feature_distance_vals = map (
1899+ _doc_feature , (1 , 4 , 5 )
1900+ )
19111901 join_key_values : Dict [str , List [ValueProto ]] = {}
19121902 for entity_key_val in entity_key_vals :
19131903 if entity_key_val is not None :
@@ -1917,11 +1907,7 @@ def retrieve_online_documents(
19171907 if join_key not in join_key_values :
19181908 join_key_values [join_key ] = []
19191909 join_key_values [join_key ].append (entity_value )
1920-
1921- document_feature_vals = [feature [4 ] for feature in document_features ]
1922- document_feature_distance_vals = [feature [5 ] for feature in document_features ]
19231910 online_features_response = GetOnlineFeaturesResponse (results = [])
1924- requested_feature = requested_feature or requested_features [0 ]
19251911 if vector_field_metadata := _get_feature_view_vector_field_metadata (
19261912 requested_feature_view
19271913 ):
@@ -1931,7 +1917,7 @@ def retrieve_online_documents(
19311917 vector_field_name : document_feature_vals ,
19321918 "distance" : document_feature_distance_vals ,
19331919 }
1934- _requested_features = [_feature .split (":" )[- 1 ] for _feature in feature_list ]
1920+ _requested_features = [_feature .split (":" )[- 1 ] for _feature in features ]
19351921 requested_features_data = {
19361922 _feature : data [_feature ]
19371923 for _feature in _requested_features
@@ -2016,7 +2002,6 @@ def _retrieve_from_online_store(
20162002 self ,
20172003 provider : Provider ,
20182004 table : FeatureView ,
2019- requested_feature : Optional [str ],
20202005 requested_features : Optional [List [str ]],
20212006 query : List [float ],
20222007 top_k : int ,
@@ -2036,7 +2021,6 @@ def _retrieve_from_online_store(
20362021 documents = provider .retrieve_online_documents (
20372022 config = self .config ,
20382023 table = table ,
2039- requested_feature = requested_feature ,
20402024 requested_features = requested_features ,
20412025 query = query ,
20422026 top_k = top_k ,
0 commit comments