Descripción general de StructArray
Utiliza StructArray cuando una entidad necesite almacenar una lista ordenada de elementos estructurados, como un documento con muchos fragmentos, una página con muchos elementos visuales o un vídeo con muchos clips. StructArray mantiene estos elementos dentro de la entidad principal, al tiempo que permite la búsqueda vectorial y el filtrado escalar en los campos de cada elemento.
¿Qué es StructArray?
Un StructArray, también conocido como matriz de estructuras, almacena un conjunto ordenado de elementos Struct en cada entidad. Todos los elementos Struct de la matriz siguen el mismo esquema. Un elemento Struct puede contener subcampos escalares, subcampos vectoriales o ambos.
Por ejemplo, una colección puede almacenar un artículo como entidad y guardar sus fragmentos en un campo StructArray denominado « chunks ». Cada fragmento puede incluir texto, metadatos de sección, puntuaciones de calidad y una o más incrustaciones vectoriales.
{
"doc_id": 1,
"title": "Vector search tuning guide",
"category": "search",
"title_vector": [0.10, 0.20, 0.30, 0.40],
"chunks": [
{
"text": "Use HNSW efSearch to trade recall for latency.",
"section": "index",
"page": 1,
"quality_score": 0.92,
"has_code": true,
"emb_list_vector": [0.11, 0.21, 0.31, 0.41],
"emb": [0.12, 0.20, 0.33, 0.39]
},
{
"text": "Range search returns vectors within a distance boundary.",
"section": "search",
"page": 2,
"quality_score": 0.86,
"has_code": false,
"emb_list_vector": [0.18, 0.23, 0.29, 0.36],
"emb": [0.19, 0.24, 0.30, 0.37]
}
]
}
Los dos subcampos vectoriales de este ejemplo representan el mismo fragmento desde dos perspectivas de búsqueda. « chunks[emb_list_vector] » está pensado para la búsqueda en «EmbeddingList» con métricas de « MAX_SIM* », mientras que « chunks[emb] » está pensado para la búsqueda a nivel de elemento con métricas vectoriales habituales, como « COSINE », « IP » o « L2 ».
Cuándo utilizar StructArray
Utiliza StructArray cuando la unidad natural que deseas devolver sea mayor que la unidad natural en la que deseas buscar o filtrar.
| Caso de uso | Por qué resulta útil StructArray | Campo típico de StructArray |
|---|---|---|
| Recuperación de documentos | Almacena un documento como una entidad mientras se realizan búsquedas en sus fragmentos. | chunks |
| Recuperación con interacción tardía | Almacena un documento o una página como una lista de incrustaciones y evalúala con MAX_SIM*. | chunks[emb_list_vector] o patches[emb] |
| Recuperación a nivel de elemento | Devuelve el fragmento, clip, parche u observación más relevante, incluyendo su desplazamiento en la matriz. | chunks[emb] |
| Filtrado estructurado | Filtra por subcampos escalares dentro de elementos Struct, como sección, puntuación, página o indicadores. | chunks[section], chunks[quality_score] |
| Reducción de resultados duplicados de elementos principales | Mantener los elementos hijos bajo la misma entidad principal en lugar de almacenar cada elemento hijo como una fila independiente. | chunks, clips, patches |
Matriz de decisión
Utiliza la siguiente matriz para elegir la ruta adecuada de StructArray.
| Objetivo | Ruta recomendada | Granularidad del resultado | Empieza aquí |
|---|---|---|---|
| Modelar un objeto padre con muchos hijos estructurados. | Crea un campo StructArray. | La entidad contiene elementos Struct ordenados. | Crear un campo StructArray |
| Inserta registros principales con datos secundarios anidados. | Insertar entidades cuyo campo StructArray sea una lista de objetos Struct. | Inserción a nivel de entidad. | Insertar datos en campos «StructArray» |
| Ejecutar ColBERT, ColPali o la recuperación de interacción tardía a nivel de documento. | Utilizar la búsqueda EmbeddingList con un índice « MAX_SIM* ». | Nivel de entidad. | Buscar con listas de incrustación |
| Busca fragmentos, clips o parches individuales. | Utiliza la búsqueda a nivel de elemento con una métrica vectorial estándar. | Nivel de elemento de Struct, con desplazamiento cuando esté disponible. | Búsqueda vectorial básica con StructArray |
| Restringe la búsqueda vectorial a nivel de elemento a aquellos elementos que cumplan condiciones escalares. | Utiliza ` element_filter`. | Filtrado a nivel de elemento; la forma del resultado depende del tipo de búsqueda. | Búsqueda filtrada con StructArray |
| Selecciona entidades en función del número de elementos de Struct que cumplan una condición. | Utilice MATCH_ANY, MATCH_ALL, MATCH_LEAST, MATCH_MOST o MATCH_EXACT. | Nivel de entidad. | Operadores de StructArray |
| Utiliza límites de puntuación o distancia en los subcampos vectoriales de StructArray. | Utilice la búsqueda por rango a nivel de elemento. | Nivel de elemento de Struct. | Búsqueda por rango con StructArray |
| Devuelve como máximo un resultado por entidad principal tras una búsqueda a nivel de elemento. | Utiliza la búsqueda por agrupación mediante la clave primaria. | Nivel de entidad tras la agrupación. | Búsqueda agrupada con StructArray |
| Combina la búsqueda de elementos de StructArray con otro campo vectorial. | Utiliza una búsqueda híbrida con una solicitud AnnSearchRequest dirigida a un subcampo vectorial de StructArray. | Subbúsqueda a nivel de elemento, reordenación a nivel de entidad. | Búsqueda híbrida con StructArray |
Comprender los dos modelos de búsqueda
Búsqueda en EmbeddingList |
Búsqueda a nivel de elemento |
|---|---|
|
La búsqueda en EmbeddingList trata los vectores dentro de un subcampo vectorial de StructArray como una lista de incrustaciones para la entidad principal. La consulta también es una lista de incrustaciones. Milvus compara la lista de incrustaciones de la consulta con la lista de incrustaciones almacenada utilizando una métrica de «
|
La búsqueda a nivel de elemento trata cada elemento de Struct como un candidato independiente para la búsqueda vectorial. Cada resultado representa un elemento coincidente dentro del campo StructArray, y los resultados desagrupados pueden revelar la posición del elemento.
|
Advertencia
Si tu colección necesita tanto la búsqueda en EmbeddingList como la búsqueda a nivel de elemento, utiliza dos subcampos vectoriales independientes. Un campo vectorial o un subcampo vectorial solo admite un índice, y los dos modos de búsqueda requieren familias de métricas diferentes.
Mapa de documentación
La documentación de StructArray se divide en páginas de modelado y páginas de búsqueda. Utiliza las páginas de modelado para definir y preparar los datos. Utiliza las páginas de búsqueda para elegir el comportamiento adecuado de recuperación y filtrado.
| Área | Página | Úsala para |
|---|---|---|
| Modelado | Crear un campo StructArray | Definir el esquema de la estructura y añadir un campo StructArray. |
| Modelado | Insertar datos en campos StructArray | Prepara e inserta datos anidados en StructArray. |
| Modelado | Indexar campos de StructArray | Crear índices vectoriales y escalares en los subcampos de StructArray. |
| Referencia | Límites de StructArray | Comprueba los límites de esquema, tipo de datos, índice, búsqueda, filtro y versión. |
| Búsqueda | Búsqueda vectorial básica con StructArray | Compara la búsqueda en EmbeddingList con la búsqueda vectorial a nivel de elemento. |
| Búsqueda | Búsqueda por rango con StructArray | Utiliza restricciones de rango con los subcampos vectoriales de StructArray. |
| Búsqueda | Búsqueda por agrupación con StructArray | Agrupa los resultados de la búsqueda a nivel de elemento por clave primaria. |
| Búsqueda | Búsqueda híbrida con StructArray | Combina la búsqueda a nivel de elemento de StructArray con otras búsquedas vectoriales. |
| Búsqueda | Búsqueda filtrada con StructArray | Utiliza los filtros de StructArray en la búsqueda, la consulta y la búsqueda híbrida. |
| Búsqueda | Búsqueda con listas de incrustación | Crea sistemas de recuperación al estilo de ColBERT y ColPali con StructArray. |
| Filtro | Operadores de StructArray | Sintaxis de referencia para los operadores « element_filter » y « MATCH_* ». |
Límites clave que hay que comprobar primero
Struct se puede utilizar como tipo de elemento de un campo Array. No se utiliza como campo de colección de nivel superior.
Todos los elementos Struct de un mismo campo StructArray comparten un esquema predefinido.
Los subcampos de tipo «Vector» requieren índices. La búsqueda en «EmbeddingList» utiliza métricas de «
MAX_SIM*», mientras que la búsqueda a nivel de elemento utiliza métricas vectoriales habituales.element_filtery «MATCH_*» son para subcampos escalares dentro de campos «StructArray». Utiliza «$[subfield]» únicamente dentro de estos operadores.Algunas combinaciones de búsqueda dependen de la versión o son específicas de un modo. Consulta los límites de StructArray antes de utilizar la búsqueda por rango, la búsqueda por agrupación, la búsqueda híbrida, los campos nulos o los campos añadidos dinámicamente.
Próximos pasos
Para diseñar un esquema, consulta «Crear un campo StructArray».
Para preparar los datos, consulta «Insertar datos en campos StructArray».
Para elegir índices, consulta «Indexar campos StructArray».
Para buscar en subcampos vectoriales de StructArray, empieza por «Búsqueda vectorial básica con StructArray».
Para filtrar subcampos escalares de StructArray, consulta «Operadores de StructArray » y «Búsqueda filtrada con StructArray».