Límites de StructArray
La compatibilidad con StructArray abarca la definición del esquema, las cargas útiles de inserción, la indexación, los modos de búsqueda y los filtros específicos de StructArray. Utiliza esta página como referencia de límites antes de confiar en el comportamiento de StructArray en producción.
La mayoría de los límites de StructArray provienen de una de estas tres fuentes: el modelo de esquema de StructArray, el modo de búsqueda que elijas para los subcampos vectoriales y la versión de Milvus en la que se ejecuta tu colección.
Resumen de los límites
| Área | Límite |
|---|---|
| Forma del esquema | Un Struct solo se puede utilizar como tipo de elemento de un campo Array. Struct no es compatible como campo de colección de nivel superior. |
| Esquema de subcampos | Todos los elementos Struct de un mismo campo StructArray comparten un esquema Struct predefinido. |
| La capacidad | max_capacity Es obligatorio y limita el número de elementos Struct que una entidad puede almacenar en el campo StructArray. |
| Cambios en los subcampos | Una vez creado un campo StructArray, no se pueden añadir subcampos a ese campo StructArray ya existente. |
| Ruta del subcampo | Utilice rutas del tipo structArray[subfield], como chunks[emb], para índices, objetivos de búsqueda, campos de salida y filtros. No utilice chunks.emb. |
| Insertar forma | Inserta un campo StructArray como una matriz de objetos. No utilices la sintaxis de ruta dentro de las cargas útiles de inserción. |
| Índices vectoriales | Un campo vectorial o un subcampo vectorial solo admite un índice. Utilice subcampos vectoriales independientes para la búsqueda en EmbeddingList y la búsqueda a nivel de elemento. |
| Funciones | Las funciones de campo no son compatibles con los campos o subcampos dentro de un campo StructArray. |
| Campos nulos | Los campos StructArray nulos están sujetos a restricciones de versión. Cuando se admiten, el valor nulo se aplica a todo el campo StructArray, no a un elemento Struct concreto de forma independiente. |
| Añadir campo dinámico | La adición de un campo StructArray a una colección existente depende de la versión y requiere que el campo añadido sea nulo. |
Límites del esquema
| Límite | Detalles |
|---|---|
| «Struct» no es un tipo de campo de nivel superior. | Crea un campo StructArray como « datatype=DataType.ARRAY » con « element_type=DataType.STRUCT » y « struct_schema ». |
| Todos los elementos comparten un mismo esquema. | Cada elemento Struct de un campo StructArray sigue la misma lista de subcampos y los mismos tipos de datos de los subcampos. |
max_capacity es obligatorio. | El número de elementos Struct en una entidad no debe superar el valor de « max_capacity » configurado para el campo StructArray. |
| Los subcampos existentes son fijos. | No se pueden añadir nuevos subcampos a un campo StructArray ya existente. Para cambiar el esquema de subcampos, elimine el campo StructArray y añádalo de nuevo con el esquema actualizado. |
| No se admiten StructArray anidados. | Un campo StructArray no puede contener subcampos anidados de tipo « Array », « ArrayOfVector », « Struct » o « ArrayOfStruct ». |
| No se admiten funciones dentro de StructArray. | No defina funciones de campo para campos StructArray ni para sus subcampos. |
Para ver ejemplos de creación de esquemas, consulta «Crear un campo StructArray».
Tipos de datos admitidos para los subcampos
Los subcampos de StructArray se asignan a un almacenamiento físico de tipo matriz. En la siguiente tabla se enumeran los tipos físicos admitidos y no admitidos.
| Tipo físico del subcampo de Struct | Compatibilidad | Notas |
|---|---|---|
Array | Compatible | Defina el subcampo como « DataType.BOOL ». |
Array | Compatible | Defina el subcampo como « DataType.INT8 », « DataType.INT16 », « DataType.INT32 » o « DataType.INT64 ». |
Array | Compatible | Defina el subcampo como DataType.FLOAT o DataType.DOUBLE. |
Array | Compatible | Defina el subcampo como « DataType.VARCHAR » y establezca « max_length ». |
ArrayOfVector | Compatible | Defina el subcampo como « DataType.FLOAT_VECTOR » y establezca « dim ». |
ArrayOfVector | Compatible | Defina el subcampo como « DataType.FLOAT16_VECTOR » y establezca « dim ». |
ArrayOfVector | Compatible | Defina el subcampo como « DataType.BFLOAT16_VECTOR » y establezca « dim ». |
ArrayOfVector | Compatible | Defina el subcampo como « DataType.INT8_VECTOR » y establezca « dim ». |
ArrayOfVector | Compatible | Defina el subcampo como « DataType.BINARY_VECTOR » y establezca « dim ». |
ArrayOfVector | No compatible | Los subcampos de vectores dispersos no son compatibles con los campos StructArray. |
Array | No compatible | Utilice « VARCHAR », no « String ». |
Array | No compatible | Los subcampos JSON no son compatibles con los campos StructArray. |
Array | No compatible | Los subcampos de geometría y las funciones SIG no son compatibles con los campos StructArray. |
Array | No compatible | Los subcampos de texto no son compatibles con los campos StructArray. |
Array | No compatible | Los subcampos «timestamptz» y las expresiones específicas de tiempo no son compatibles con los campos StructArray. |
Array, ArrayOfVector, Struct o ArrayOfStruct | No compatible | Los campos StructArray no admiten subcampos anidados de tipo matriz, matriz vectorial, Struct o matriz de Struct. |
Límites de esquemas nulos y dinámicos
El comportamiento de los StructArray nulos y la adición dinámica de campos StructArray dependen de la versión.
| Capacidad | Límite |
|---|---|
| Campo StructArray nulo | Solo se admite en versiones que incluyan soporte para StructArray nulo y matrices vectoriales nulas. |
| Valor nulo en Python | Utiliza ` None ` para insertar un valor `StructArray` nulo en Python. No utilices ` Null ` ni ` null`. |
| Ámbito del valor nulo | El valor nulo se aplica a todo el campo StructArray. Por ejemplo, chunks=None solo es válido cuando chunks es nulo. |
| Valor de StructArray parcialmente nulo | Cuando un campo StructArray contiene un valor de matriz válido, no mezcles matrices de subcampos nulos con matrices de subcampos válidos en el mismo valor. |
| Adición dinámica de un campo StructArray | La adición de un campo StructArray a una colección existente solo está permitida en versiones que incluyan soporte para campos StructArray dinámicos. |
| Requisito de ser nulo para la adición dinámica | Un campo StructArray añadido a una colección existente debe ser nulo, ya que las entidades existentes no tienen ningún valor para el nuevo campo. |
| Entidades existentes tras la adición dinámica | Las entidades existentes devuelven « null » para el campo StructArray añadido en todos sus subcampos. |
En Milvus v3.0.x, están disponibles los campos StructArray nulos, las matrices vectoriales nulas y la adición dinámica de campos StructArray.
Para ver ejemplos de inserción con campos StructArray nulos, consulta Insertar datos en campos StructArray.
Límites de inserción
| Límite | Detalles |
|---|---|
| Forma de la carga útil | Inserte el campo StructArray como una matriz de objetos Struct, como, por ejemplo, chunks: [{"text": "...", "emb": [...]}]. |
| Nombres de subcampos | Dentro de cada objeto Struct, utilice nombres de subcampos como text y emb, no rutas como chunks[text]. |
| Alineación con el esquema | Cada elemento Struct debe coincidir con el esquema de Struct. |
| Capacidad | El número de elementos Struct en una entidad no debe superar max_capacity. |
| Dimensiones del vector | Los valores vectoriales deben coincidir con el dim configurado para sus subcampos vectoriales. |
| Duplicación en el modo de búsqueda | Si necesitas tanto la búsqueda en EmbeddingList como la búsqueda a nivel de elemento, escribe los vectores en dos subcampos vectoriales separados. |
Límites de índices y métricas
Un subcampo vectorial StructArray puede indexarse tanto para la búsqueda en EmbeddingList como para la búsqueda a nivel de elemento. Un mismo subcampo vectorial no puede utilizar ambas familias de métricas, ya que cada campo vectorial o subcampo vectorial solo admite un índice.
| Modo de búsqueda | Familia de métricas | Nivel de resultado |
|---|---|---|
| Búsqueda en EmbeddingList | MAX_SIM, métricas « MAX_SIM_COSINE », « MAX_SIM_IP », « MAX_SIM_L2 » o métricas binarias « MAX_SIM_* » | Resultados a nivel de entidad. |
| Búsqueda a nivel de elemento | Métricas vectoriales habituales, como L2, IP, COSINE, HAMMING o JACCARD | Resultados a nivel de elemento que pueden incluir el desplazamiento del elemento coincidente. |
Utilice subcampos vectoriales independientes cuando se requieran ambos modos. Por ejemplo, utilice chunks[emb_list_vector] para la búsqueda en EmbeddingList y chunks[emb] para la búsqueda a nivel de elemento.
Los subcampos vectoriales de StructArray cuentan como subcampos vectoriales a la hora de planificar el esquema de la colección. Mantenga el número total de campos vectoriales y subcampos vectoriales dentro de los límites de la versión de destino y el nivel de servicio.
Para conocer la matriz de tipos de índice y de métricas compatibles, consulta Campos StructArray de índice.
Límites de búsqueda
| Comportamiento de la búsqueda | Compatibilidad y límites |
|---|---|
| Búsqueda básica en EmbeddingList | Compatible con subcampos vectoriales de StructArray indexados con métric MAX_SIM*. Devuelve resultados a nivel de entidad. |
| Búsqueda básica a nivel de elemento | Compatible con subcampos vectoriales de StructArray indexados con métricas vectoriales regulares. Puede devolver las coordenadas de los elementos coincidentes. |
| Búsqueda por rango | Compatible según el modo de búsqueda y la compatibilidad con índices y métricas de la versión de destino. Para conocer el comportamiento del rango de búsqueda híbrida en solicitudes de StructArray a nivel de elemento, consulta tu versión de destino. |
| Búsqueda por agrupación | La búsqueda agrupada a nivel de elemento puede devolver posiciones. El comportamiento de la búsqueda híbrida con agrupación para las solicitudes de StructArray a nivel de elemento depende de la versión. |
| Búsqueda híbrida | Una solicitud de búsqueda híbrida solo puede incluir solicitudes de subcampos vectoriales de StructArray cuando la versión de destino admita esa combinación de búsqueda. Cada solicitud sigue la familia de métricas del subcampo vectorial indexado. |
| Salida de desplazamiento | El desplazamiento está disponible para los resultados de búsqueda a nivel de elemento. La búsqueda en EmbeddingList devuelve resultados a nivel de entidad y no utiliza los desplazamientos de elementos como unidad principal de resultado. |
Límites de filtros y operadores
El filtrado escalar de StructArray se gestiona mediante operadores de StructArray, como « element_filter » y la familia « MATCH_* ». La matriz detallada de compatibilidad con predicados se encuentra en «Operadores de StructArray».
A grandes rasgos:
Utilice «
$[subfield]» únicamente dentro de operadores de StructArray.Utilice subcampos escalares para los predicados escalares.
No utilices subcampos vectoriales como entradas de predicados escalares de «
$[...]».La sintaxis de ruta JSON, las funciones JSON, las funciones de contenedores de matrices, las funciones de coincidencia de texto, las funciones de geometría/SIG y las expresiones Timestamptz no son compatibles con los predicados a nivel de elemento de StructArray.
Es preferible utilizar comparaciones booleanas explícitas, como «
$[has_code] == true», en lugar de expresiones booleanas simples.
Páginas relacionadas
Para crear un campo StructArray, consulta «Crear un campo StructArray».
Para insertar datos, consulte Insertar datos en campos StructArray.
Para crear índices vectoriales y escalares, consulta «Indexar campos StructArray».
Para repasar la sintaxis de los filtros de StructArray, consulta «Operadores de StructArray».