@@ -111,25 +111,34 @@ def _ensure_collection(self) -> None:
111111 },
112112 )
113113
114- # Always ensure indexes, including on collections created by an
115- # earlier deployment. Qdrant Cloud strict filtering requires indexes
116- # for exact-match payload filters .
117- for field_name , schema in (
114+ # Keep the payload schema synchronized with every exact-match filter
115+ # used by the existing LegacyLens code. This runs on every startup so
116+ # collections created by older deployments are repaired in-place .
117+ payload_indexes = (
118118 ("_user_id" , models .PayloadSchemaType .KEYWORD ),
119119 ("_migration_name" , models .PayloadSchemaType .KEYWORD ),
120120 ("_scope" , models .PayloadSchemaType .KEYWORD ),
121121 ("meta_source" , models .PayloadSchemaType .KEYWORD ),
122122 ("meta_source_file_path" , models .PayloadSchemaType .KEYWORD ),
123123 ("meta_file_name" , models .PayloadSchemaType .KEYWORD ),
124124 ("meta_doc_type" , models .PayloadSchemaType .KEYWORD ),
125+ ("meta_migration_status" , models .PayloadSchemaType .KEYWORD ),
126+ ("meta_plan_id" , models .PayloadSchemaType .KEYWORD ),
127+ ("meta_symbol_id" , models .PayloadSchemaType .KEYWORD ),
128+ ("meta_symbol_hash" , models .PayloadSchemaType .KEYWORD ),
129+ ("meta_source_symbol_id" , models .PayloadSchemaType .KEYWORD ),
130+ ("meta_source_symbol_hash" , models .PayloadSchemaType .KEYWORD ),
125131 ("meta_is_target" , models .PayloadSchemaType .BOOL ),
126- ):
132+ )
133+
134+ for field_name , schema in payload_indexes :
127135 try :
128136 self .client .create_payload_index (
129137 collection_name = self .collection_name ,
130138 field_name = field_name ,
131139 field_schema = schema ,
132140 )
141+ logger .debug ("Ensured Qdrant payload index: %s" , field_name )
133142 except Exception as exc : # pragma: no cover - best-effort index setup
134143 logger .debug ("Payload index %s not created: %s" , field_name , exc )
135144
0 commit comments