Panoramica su StructArray

Utilizzare StructArray quando un'entità deve memorizzare un elenco ordinato di elementi strutturati, come ad esempio un documento con molti segmenti, una pagina con molte aree visive o un video con molte clip. StructArray conserva questi elementi all'interno dell'entità principale, consentendo al contempo la ricerca vettoriale e il filtraggio scalare sui campi all'interno di ciascun elemento.

Che cos’è StructArray?

Uno StructArray, noto anche come array di Struct, memorizza un insieme ordinato di elementi Struct in ciascuna entità. Ogni elemento Struct nell’array segue lo stesso schema. Un elemento Struct può contenere sottocampi scalari, sottocampi vettoriali o entrambi.

Ad esempio, una raccolta può memorizzare un articolo come entità e memorizzarne i segmenti in un campo StructArray denominato chunks. Ogni segmento può includere testo, metadati della sezione, punteggi di qualità e una o più rappresentazioni vettoriali.

{
  "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]
    }
  ]
}

I due sottocampi vettoriali in questo esempio rappresentano lo stesso blocco da due prospettive di ricerca. ` chunks[emb_list_vector] ` è destinato alla ricerca EmbeddingList con metriche ` MAX_SIM* `, mentre ` chunks[emb] ` è destinato alla ricerca a livello di elemento con metriche vettoriali standard quali ` COSINE`, ` IP` o ` L2`.

Quando utilizzare StructArray

Utilizzare StructArray quando l’unità naturale che si desidera restituire è più grande dell’unità naturale che si desidera cercare o filtrare.

Caso d'usoPerché StructArray è utileCampo StructArray tipico
Recupero di documentiMemorizza un documento come entità mentre si effettua la ricerca nei suoi blocchi.chunks
Recupero con interazione ritardataMemorizza un documento o una pagina come elenco di embedding e assegnagli un punteggio con MAX_SIM*.chunks[emb_list_vector] oppure patches[emb]
Recupero a livello di elementoRestituisci il frammento, il clip, la patch o l’osservazione più rilevante, compreso il relativo offset nell’array.chunks[emb]
Filtraggio strutturatoFiltra in base ai sottocampi scalari all'interno degli elementi Struct, quali sezione, punteggio, pagina o flag.chunks[section], chunks[quality_score]
Riduzione dei risultati duplicati a livello di entità padreMantiene gli elementi figli sotto la stessa entità padre invece di memorizzare ciascun figlio come riga separata.chunks, clips, patches

Matrice decisionale

Utilizzare la seguente matrice per scegliere il percorso StructArray corretto.

ObiettivoPercorso consigliatoGranularità del risultatoInizia da qui
Modellare un oggetto padre con molti figli strutturati.Crea un campo StructArray.L'entità contiene elementi Struct ordinati.Creare un campo StructArray
Inserisci record padre con dati figlio annidati.Inserire entità il cui campo StructArray è un elenco di oggetti Struct.Inserimento a livello di entità.Inserimento di dati nei campi StructArray
Eseguire ColBERT, ColPali o il recupero a interazione tardiva a livello di documento.Utilizzare la ricerca EmbeddingList con un indice MAX_SIM*.A livello di entità.Ricerca con Embedding List
Cerca singoli chunk, clip o patch.Utilizza la ricerca a livello di elemento con una metrica vettoriale regolare.Livello di elemento Struct, con offset quando disponibile.Ricerca vettoriale di base con StructArray
Limita la ricerca vettoriale a livello di elemento agli elementi che soddisfano condizioni scalari.Utilizza ` element_filter`.Filtraggio a livello di elemento; la forma del risultato dipende dal tipo di ricerca.Ricerca filtrata con StructArray
Selezionare le entità in base al numero di elementi Struct che soddisfano una condizione.Utilizzare MATCH_ANY, MATCH_ALL, MATCH_LEAST, MATCH_MOST o MATCH_EXACT.Livello entità.Operatori StructArray
Utilizzare i limiti di punteggio o di distanza sui sottocampi vettoriali di StructArray.Utilizzare la ricerca per intervallo a livello di elemento.Livello degli elementi di Struct.Ricerca per intervallo con StructArray
Restituisce al massimo un risultato per entità padre dopo la ricerca a livello di elemento.Utilizzare la ricerca raggruppata per chiave primaria.Livello entità dopo il raggruppamento.Ricerca raggruppata con StructArray
Combina la ricerca sugli elementi di StructArray con un altro campo vettoriale.Utilizzare la ricerca ibrida con un AnnSearchRequest mirato a un sottocampo vettoriale di StructArray.Ricerca secondaria a livello di elemento, riordino dei risultati a livello di entità.Ricerca ibrida con StructArray

Comprendere i due modelli di ricerca

Ricerca EmbeddingList

Ricerca a livello di elemento

La ricerca EmbeddingList considera i vettori all'interno di un sottocampo vettoriale di StructArray come un unico elenco di embedding per l'entità padre. Anche la query è un elenco di embedding. Milvus confronta l'elenco di embedding della query con quello memorizzato utilizzando una metrica di MAX_SIM* e e restituisce le entità corrispondenti.

  • Dati della query: lista di embedding.
  • Famiglia di metriche: MAX_SIM*.
  • Granularità dei risultati: livello di entità.
  • Ideale per: recupero a interazione tardiva a livello di documento o di pagina.

La ricerca a livello di elemento tratta ogni elemento Struct come un candidato indipendente per la ricerca vettoriale. Ogni risultato positivo rappresenta un elemento corrispondente all’interno del campo StructArray, e i risultati non raggruppati possono rivelare l’offset dell’elemento.

  • Dati di query: vettore regolare.
  • Famiglia di metriche: metriche vettoriali regolari.
  • Granularità dei risultati: livello di elemento Struct.
  • Ideale per: recupero a livello di blocco, clip o patch.

Avviso

Se la tua raccolta richiede sia la ricerca EmbeddingList che quella a livello di elemento, utilizza due sottocampi vettoriali separati. Un campo vettoriale o un sottocampo vettoriale accetta un solo indice e le due modalità di ricerca richiedono famiglie di metriche diverse.

Mappa della documentazione

La documentazione di StructArray è suddivisa in pagine dedicate alla modellazione e pagine dedicate alla ricerca. Utilizza le pagine di modellazione per definire e preparare i dati. Utilizza le pagine di ricerca per scegliere il comportamento di recupero e filtraggio più adatto.

AreaPaginaUtilizzala per
ModellazioneCreare un campo StructArrayDefinire lo schema Struct e aggiungere un campo StructArray.
ModellazioneInserimento dei dati nei campi StructArrayPreparare e inserire dati StructArray annidati.
ModellazioneIndice dei campi StructArrayCreare indici vettoriali e scalari sui sottocampi di StructArray.
RiferimentoLimiti di StructArrayVerifica i limiti relativi a schema, tipo di dati, indice, ricerca, filtro e versione.
RicercaRicerca vettoriale di base con StructArrayConfronta la ricerca EmbeddingList con la ricerca vettoriale a livello di elemento.
RicercaRicerca per intervallo con StructArrayUtilizza i vincoli di intervallo con i sottocampi vettoriali di StructArray.
RicercaRicerca raggruppata con StructArrayRaggruppa i risultati della ricerca a livello di elemento in base alla chiave primaria.
RicercaRicerca ibrida con StructArrayCombina la ricerca a livello di elemento con StructArray con altre ricerche vettoriali.
RicercaRicerca filtrata con StructArrayUtilizza i filtri di StructArray nella ricerca, nella query e nella ricerca ibrida.
RicercaRicerca con elenchi di embeddingCrea sistemi di recupero in stile ColBERT e ColPali con StructArray.
FiltroOperatori StructArraySintassi di riferimento per gli operatori element_filter e MATCH_*.

Limiti chiave da verificare per primi

  • Struct può essere utilizzato come tipo di elemento di un campo Array. Non viene utilizzato come campo di raccolta di primo livello.

  • Tutti gli elementi Struct presenti nello stesso campo StructArray condividono uno schema predefinito.

  • I sottocampi vettoriali richiedono indici. La ricerca EmbeddingList utilizza le metriche di MAX_SIM*, mentre la ricerca a livello di elemento utilizza le normali metriche vettoriali.

  • element_filter e MATCH_* sono destinati ai sottocampi scalari all’interno dei campi StructArray. Utilizzare $[subfield] solo all’interno di questi operatori.

  • Alcune combinazioni di ricerca sono limitate alla versione o specifiche della modalità. Verificare i limiti di StructArray prima di fare affidamento sulla ricerca per intervallo, sulla ricerca per raggruppamento, sulla ricerca ibrida, sui campi nullabili o sui campi aggiunti dinamicamente.

Passi successivi

  1. Per progettare uno schema, leggere Creare un campo StructArray.

  2. Per preparare i dati, leggere Inserimento di dati nei campi StructArray.

  3. Per scegliere gli indici, leggere " Indice dei campi StructArray".

  4. Per effettuare ricerche nei sottocampi vettoriali di StructArray, iniziare con Ricerca vettoriale di base con StructArray.

  5. Per filtrare i sottocampi scalari di StructArray, consultare Operatori StructArray e Ricerca filtrata con StructArray.

Tradotto daDeepL

Prova Milvus gestito gratuitamente

Zilliz Cloud è senza problemi, basato su Milvus e 10 volte più veloce.

Inizia
Feedback

Questa pagina è stata utile?