Use named vectors for independent text and image embeddings
I would use one Qdrant collection with two named dense vector fields, for example "text" and "image". Each product is one point, with catalog metadata in payload. The two named vectors can have different dimensions and distance configurations, which is why I would not concatenate unrelated model outputs just to force one vector schema. At query time the application selects the appropriate named vector, or uses a multimodal ranking strategy when the product experience requires combining both signals. A common mistake is assuming all vectors in a collection must use one dimension and metric; named vectors are designed for multiple vector configurations in the same point.
Trade-off: one collection keeps product data together, but storing two vectors increases storage and memory compared with one vector. Separate collections can be better when modalities have different scaling, retention, or operational requirements.
Each named vector has its own size and distance configuration, and queries must specify the correct vector name.
For production search, I would also index payload fields used for filtering, such as category, brand, availability, and merchant or tenant ID.
The current Python client commonly uses query_points for general querying; older Qdrant examples may use search, so client API syntax is version-sensitive. A shared multimodal embedding space is an alternative when direct text-to-image similarity is a core requirement.
0-2 years experience
2-5 years experience
5-8 years experience
8+ years experience