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 usoPor qué resulta útil StructArrayCampo típico de StructArray
Recuperación de documentosAlmacena un documento como una entidad mientras se realizan búsquedas en sus fragmentos.chunks
Recuperación con interacción tardíaAlmacena 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 elementoDevuelve el fragmento, clip, parche u observación más relevante, incluyendo su desplazamiento en la matriz.chunks[emb]
Filtrado estructuradoFiltra 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 principalesMantener 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.

ObjetivoRuta recomendadaGranularidad del resultadoEmpieza 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 « MAX_SIM* » y devuelve las entidades que coinciden.

  • Datos de la consulta: lista de incrustaciones.
  • Familia de métricas: « MAX_SIM* ».
  • Granularidad del resultado: nivel de entidad.
  • Ideal para: recuperación de interacción tardía a nivel de documento o de página.

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.

  • Datos de consulta: vector regular.
  • Familia de métricas: métricas de vector regular.
  • Granularidad de los resultados: nivel de elemento de Struct.
  • Ideal para: recuperación a nivel de fragmento, clip o parche.

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.

ÁreaPáginaÚsala para
ModeladoCrear un campo StructArrayDefinir el esquema de la estructura y añadir un campo StructArray.
ModeladoInsertar datos en campos StructArrayPrepara e inserta datos anidados en StructArray.
ModeladoIndexar campos de StructArrayCrear índices vectoriales y escalares en los subcampos de StructArray.
ReferenciaLímites de StructArrayComprueba los límites de esquema, tipo de datos, índice, búsqueda, filtro y versión.
BúsquedaBúsqueda vectorial básica con StructArrayCompara la búsqueda en EmbeddingList con la búsqueda vectorial a nivel de elemento.
BúsquedaBúsqueda por rango con StructArrayUtiliza restricciones de rango con los subcampos vectoriales de StructArray.
BúsquedaBúsqueda por agrupación con StructArrayAgrupa los resultados de la búsqueda a nivel de elemento por clave primaria.
BúsquedaBúsqueda híbrida con StructArrayCombina la búsqueda a nivel de elemento de StructArray con otras búsquedas vectoriales.
BúsquedaBúsqueda filtrada con StructArrayUtiliza los filtros de StructArray en la búsqueda, la consulta y la búsqueda híbrida.
BúsquedaBúsqueda con listas de incrustaciónCrea sistemas de recuperación al estilo de ColBERT y ColPali con StructArray.
FiltroOperadores de StructArraySintaxis 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_filter y « 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

  1. Para diseñar un esquema, consulta «Crear un campo StructArray».

  2. Para preparar los datos, consulta «Insertar datos en campos StructArray».

  3. Para elegir índices, consulta «Indexar campos StructArray».

  4. Para buscar en subcampos vectoriales de StructArray, empieza por «Búsqueda vectorial básica con StructArray».

  5. Para filtrar subcampos escalares de StructArray, consulta «Operadores de StructArray » y «Búsqueda filtrada con StructArray».

Traducido porDeepL

Prueba Milvus gestionado gratis

Zilliz Cloud no da problemas, funciona con Milvus y es 10 veces más rápido.

Empezar
Feedback

¿Fue útil esta página?