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

ÁreaLímite
Forma del esquemaUn 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 subcamposTodos los elementos Struct de un mismo campo StructArray comparten un esquema Struct predefinido.
La capacidadmax_capacity Es obligatorio y limita el número de elementos Struct que una entidad puede almacenar en el campo StructArray.
Cambios en los subcamposUna vez creado un campo StructArray, no se pueden añadir subcampos a ese campo StructArray ya existente.
Ruta del subcampoUtilice rutas del tipo structArray[subfield], como chunks[emb], para índices, objetivos de búsqueda, campos de salida y filtros. No utilice chunks.emb.
Insertar formaInserta un campo StructArray como una matriz de objetos. No utilices la sintaxis de ruta dentro de las cargas útiles de inserción.
Índices vectorialesUn 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.
FuncionesLas funciones de campo no son compatibles con los campos o subcampos dentro de un campo StructArray.
Campos nulosLos 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ámicoLa 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ímiteDetalles
«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 StructCompatibilidadNotas
ArrayCompatibleDefina el subcampo como « DataType.BOOL ».
ArrayCompatibleDefina el subcampo como « DataType.INT8 », « DataType.INT16 », « DataType.INT32 » o « DataType.INT64 ».
ArrayCompatibleDefina el subcampo como DataType.FLOAT o DataType.DOUBLE.
ArrayCompatibleDefina el subcampo como « DataType.VARCHAR » y establezca « max_length ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.FLOAT_VECTOR » y establezca « dim ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.FLOAT16_VECTOR » y establezca « dim ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.BFLOAT16_VECTOR » y establezca « dim ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.INT8_VECTOR » y establezca « dim ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.BINARY_VECTOR » y establezca « dim ».
ArrayOfVectorNo compatibleLos subcampos de vectores dispersos no son compatibles con los campos StructArray.
ArrayNo compatibleUtilice « VARCHAR », no « String ».
ArrayNo compatibleLos subcampos JSON no son compatibles con los campos StructArray.
ArrayNo compatibleLos subcampos de geometría y las funciones SIG no son compatibles con los campos StructArray.
ArrayNo compatibleLos subcampos de texto no son compatibles con los campos StructArray.
ArrayNo compatibleLos subcampos «timestamptz» y las expresiones específicas de tiempo no son compatibles con los campos StructArray.
Array, ArrayOfVector, Struct o ArrayOfStructNo compatibleLos 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.

CapacidadLímite
Campo StructArray nuloSolo se admite en versiones que incluyan soporte para StructArray nulo y matrices vectoriales nulas.
Valor nulo en PythonUtiliza ` None ` para insertar un valor `StructArray` nulo en Python. No utilices ` Null ` ni ` null`.
Ámbito del valor nuloEl 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 nuloCuando 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 StructArrayLa 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ámicaUn 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ámicaLas 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ímiteDetalles
Forma de la carga útilInserte el campo StructArray como una matriz de objetos Struct, como, por ejemplo, chunks: [{"text": "...", "emb": [...]}].
Nombres de subcamposDentro de cada objeto Struct, utilice nombres de subcampos como text y emb, no rutas como chunks[text].
Alineación con el esquemaCada elemento Struct debe coincidir con el esquema de Struct.
CapacidadEl número de elementos Struct en una entidad no debe superar max_capacity.
Dimensiones del vectorLos valores vectoriales deben coincidir con el dim configurado para sus subcampos vectoriales.
Duplicación en el modo de búsquedaSi 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úsquedaFamilia de métricasNivel de resultado
Búsqueda en EmbeddingListMAX_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 elementoMétricas vectoriales habituales, como L2, IP, COSINE, HAMMING o JACCARDResultados 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úsquedaCompatibilidad y límites
Búsqueda básica en EmbeddingListCompatible con subcampos vectoriales de StructArray indexados con métric MAX_SIM*. Devuelve resultados a nivel de entidad.
Búsqueda básica a nivel de elementoCompatible con subcampos vectoriales de StructArray indexados con métricas vectoriales regulares. Puede devolver las coordenadas de los elementos coincidentes.
Búsqueda por rangoCompatible 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ónLa 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íbridaUna 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 desplazamientoEl 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.

  1. Para crear un campo StructArray, consulta «Crear un campo StructArray».

  2. Para insertar datos, consulte Insertar datos en campos StructArray.

  3. Para crear índices vectoriales y escalares, consulta «Indexar campos StructArray».

  4. Para repasar la sintaxis de los filtros de StructArray, consulta «Operadores de StructArray».