@@ -712,99 +712,6 @@ def _handle_field_filter(
712712 else :
713713 raise NotImplementedError ()
714714
715- def _create_filter_clause_deprecated (self , key , value ): # type: ignore[no-untyped-def]
716- """Deprecated functionality.
717-
718- This is for backwards compatibility with the JSON based schema for metadata.
719- It uses incorrect operator syntax (operators are not prefixed with $).
720-
721- This implementation is not efficient, and has bugs associated with
722- the way that it handles numeric filter clauses.
723- """
724- IN , NIN , BETWEEN , GT , LT , NE = "in" , "nin" , "between" , "gt" , "lt" , "ne"
725- EQ , LIKE , CONTAINS , OR , AND = "eq" , "like" , "contains" , "or" , "and"
726-
727- value_case_insensitive = {k .lower (): v for k , v in value .items ()}
728- if IN in map (str .lower , value ):
729- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext .in_ (
730- value_case_insensitive [IN ]
731- )
732- elif NIN in map (str .lower , value ):
733- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext .not_in (
734- value_case_insensitive [NIN ]
735- )
736- elif BETWEEN in map (str .lower , value ):
737- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext .between (
738- str (value_case_insensitive [BETWEEN ][0 ]),
739- str (value_case_insensitive [BETWEEN ][1 ]),
740- )
741- elif GT in map (str .lower , value ):
742- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext > str (
743- value_case_insensitive [GT ]
744- )
745- elif LT in map (str .lower , value ):
746- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext < str (
747- value_case_insensitive [LT ]
748- )
749- elif NE in map (str .lower , value ):
750- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext != str (
751- value_case_insensitive [NE ]
752- )
753- elif EQ in map (str .lower , value ):
754- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext == str (
755- value_case_insensitive [EQ ]
756- )
757- elif LIKE in map (str .lower , value ):
758- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext .like (
759- value_case_insensitive [LIKE ]
760- )
761- elif CONTAINS in map (str .lower , value ):
762- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext .contains (
763- value_case_insensitive [CONTAINS ]
764- )
765- elif OR in map (str .lower , value ):
766- or_clauses = [
767- self ._create_filter_clause (key , sub_value )
768- for sub_value in value_case_insensitive [OR ]
769- ]
770- filter_by_metadata = sqlalchemy .or_ (* or_clauses )
771- elif AND in map (str .lower , value ):
772- and_clauses = [
773- self ._create_filter_clause (key , sub_value )
774- for sub_value in value_case_insensitive [AND ]
775- ]
776- filter_by_metadata = sqlalchemy .and_ (* and_clauses )
777-
778- else :
779- filter_by_metadata = None
780-
781- return filter_by_metadata
782-
783- def _create_filter_clause_json_deprecated (
784- self , filter : Any
785- ) -> List [SQLColumnExpression ]:
786- """Convert filters from IR to SQL clauses.
787-
788- **DEPRECATED** This functionality will be deprecated in the future.
789-
790- It implements translation of filters for a schema that uses JSON
791- for metadata rather than the JSONB field which is more efficient
792- for querying.
793- """
794- filter_clauses = []
795- for key , value in filter .items ():
796- if isinstance (value , dict ):
797- filter_by_metadata = self ._create_filter_clause_deprecated (key , value )
798-
799- if filter_by_metadata is not None :
800- filter_clauses .append (filter_by_metadata )
801- else :
802- filter_by_metadata = self .EmbeddingStore .cmetadata [key ].astext == str (
803- value
804- )
805- filter_clauses .append (filter_by_metadata )
806- return filter_clauses
807-
808715 def _create_filter_clause (self , filters : Any ) -> Any :
809716 """Convert LangChain IR filter representation to matching SQLAlchemy clauses.
810717
@@ -905,14 +812,9 @@ def __query_collection(
905812
906813 filter_by = [self .EmbeddingStore .collection_id == collection .uuid ]
907814 if filter :
908- if self .use_jsonb :
909- filter_clauses = self ._create_filter_clause (filter )
910- if filter_clauses is not None :
911- filter_by .append (filter_clauses )
912- else :
913- # Old way of doing things
914- filter_clauses = self ._create_filter_clause_json_deprecated (filter )
915- filter_by .extend (filter_clauses )
815+ filter_clauses = self ._create_filter_clause (filter )
816+ if filter_clauses is not None :
817+ filter_by .append (filter_clauses )
916818
917819 _type = self .EmbeddingStore
918820
0 commit comments