Fornire o rilevare automaticamente uno schema

Quando importi dati strutturati utilizzando la console Google Cloud , Gemini Enterprise rileva automaticamente lo schema. Puoi utilizzare questo schema rilevato automaticamente nel tuo motore o utilizzare l'API per fornire uno schema che indichi la struttura dei dati.

Se fornisci uno schema e in un secondo momento lo aggiorni con un nuovo schema, quest'ultimo deve essere compatibile con le versioni precedenti dell'originale. In caso contrario, l'aggiornamento dello schema non va a buon fine.

Per informazioni di riferimento sullo schema, consulta dataStores.schemas.

Approcci per fornire lo schema per il datastore

Esistono vari approcci per determinare lo schema dei dati strutturati.

  • Rilevamento automatico e modifica. Consenti a Gemini Enterprise di rilevare e suggerire automaticamente uno schema iniziale. Poi, perfezioni lo schema tramite l'interfaccia della console. Google consiglia vivamente di mappare le proprietà chiave a tutti i campi importanti dopo il rilevamento automatico dei campi.

    Questo è l'approccio che utilizzerai quando segui le istruzioni della console Google Cloud per i dati strutturati in Crea un datastore proprietario.

  • Fornisci lo schema come oggetto JSON. Fornisci lo schema a Gemini Enterprise come oggetto JSON. Devi aver preparato un oggetto JSON corretto. Per un esempio di oggetto JSON, consulta Esempio di schema come oggetto JSON. Dopo aver creato lo schema, carichi i dati in base a questo schema.

    Questo è l'approccio che puoi utilizzare quando crei un datastore tramite l'API utilizzando un comando (o un programma) curl. Ad esempio, consulta Importa una volta da BigQuery. Consulta anche le seguenti istruzioni, Fornisci il tuo schema.

Informazioni sul rilevamento automatico e sulla modifica

Quando inizi a importare i dati, Gemini Enterprise campiona i primi documenti importati. In base a questi documenti, propone uno schema per i dati, che puoi rivedere o modificare.

Se i campi che vuoi mappare alle proprietà chiave non sono presenti nei documenti campionati, puoi aggiungerli manualmente quando esamini lo schema.

Se Gemini Enterprise rileva campi aggiuntivi in un secondo momento durante l'importazione dei dati, li importa comunque e li aggiunge allo schema. Se vuoi modificare lo schema dopo l'importazione di tutti i dati, consulta Aggiorna lo schema.

Esempio di schema come oggetto JSON

Puoi definire il tuo schema utilizzando il formato schema JSON, un linguaggio dichiarativo open source per definire, annotare e convalidare i documenti JSON. Ad esempio, questa è un'annotazione dello schema JSON valida:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "dynamic": "true",
  "datetime_detection": true,
  "geolocation_detection": true,
  "properties": {
    "title": {
      "type": "string",
      "keyPropertyMapping": "title",
      "retrievable": true,
      "completable": true
    },
    "description": {
      "type": "string",
      "keyPropertyMapping": "description"
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "string",
        "keyPropertyMapping": "category"
      }
    },
    "uri": {
      "type": "string",
      "keyPropertyMapping": "uri"
    },
    "brand": {
      "type": "string",
      "indexable": true,
      "dynamicFacetable": true
    },
    "location": {
      "type": "geolocation",
      "indexable": true,
      "retrievable": true
    },
    "creationDate": {
      "type": "datetime",
      "indexable": true,
      "retrievable": true
    },
    "isCurrent": {
      "type": "boolean",
      "indexable": true,
      "retrievable": true
    }
  }
}

Ecco alcuni dei campi di questo esempio di schema:

  • dynamic. Se dynamic è impostato sul valore stringa "true", tutte le nuove proprietà trovate nei dati importati vengono aggiunte allo schema. Se dynamic è impostato su "false", le nuove proprietà trovate nei dati importati vengono ignorate; le proprietà non vengono aggiunte allo schema e i valori non vengono importati.

    Ad esempio, uno schema ha due proprietà: title e description e carichi dati che contengono proprietà per title, description e rating. Se dynamic è "true", la proprietà e i dati delle valutazioni vengono importati. Se dynamic è "false", le proprietà rating non vengono importate, mentre title e description sì.

    Il valore predefinito è "true".

  • datetime_detection. Se datetime_detection è impostato sul valore booleano true, quando vengono importati i dati in formato datetime, il tipo di schema viene impostato su datetime. I formati supportati sono RFC 3339 e ISO 8601.

    Ad esempio:

    • 2024-08-05 08:30:00 UTC

    • 2024-08-05T08:30:00Z

    • 2024-08-05T01:30:00-07:00

    • 2024-08-05

    • 2024-08-05T08:30:00+00:00

    Se datatime_detection è impostato sul valore booleano false, quando i dati in formato datetime vengono importati, il tipo di schema viene impostato su string.

    Il valore predefinito è true.

  • geolocation_detection. Se geolocation_detection è impostato sul valore booleano true, quando vengono importati i dati in formato di geolocalizzazione, il tipo di schema viene impostato su geolocation. I dati vengono rilevati come geolocalizzazione se sono un oggetto contenente un numero di latitudine e un numero di longitudine o un oggetto contenente una stringa di indirizzo.

    Ad esempio:

    • "myLocation": {"latitude":37.42, "longitude":-122.08}

    • "myLocation": {"address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043"}

    Se geolocation_detection è impostato sul valore booleano false, quando i dati in formato di geolocalizzazione vengono importati, il tipo di schema viene impostato su object.

    Il valore predefinito è true.

  • keyPropertyMapping: un campo che mappa le parole chiave predefinite ai campi critici dei tuoi documenti, contribuendo a chiarirne il significato semantico. I valori includono title, description, uri e category. Tieni presente che il nome del campo non deve corrispondere al valore keyPropertyValues. Ad esempio, per un campo denominato my_title, puoi includere un campo keyPropertyValues con un valore title.

    I campi contrassegnati con keyPropertyMapping sono per impostazione predefinita indicizzabili e ricercabili, ma non recuperabili, completabili o dynamicFacetable. Ciò significa che non è necessario includere i campi indexable o searchable con un campo keyPropertyValues per ottenere il comportamento predefinito previsto.

  • type. Il tipo di campo. Si tratta di un valore di stringa che è datetime, geolocation o uno dei tipi primitivi (integer, boolean, object, array, number o string).

  • retrievable. Indica se questo campo può essere restituito in una risposta di ricerca. Può essere impostato per i campi di tipo number, string, boolean, integer, datetime e geolocation. È possibile impostare come recuperabili un massimo di 50 campi. I campi definiti dall'utente e i campi keyPropertyValues non sono recuperabili per impostazione predefinita. Per rendere un campo recuperabile, includi "retrievable": true nel campo.

  • indexable. Indica se questo campo può essere filtrato, utilizzato per la navigazione faccettata, potenziato o ordinato nel metodo servingConfigs.search. Può essere impostato per i campi di tipo number, string, boolean, integer, datetime e geolocation. È possibile impostare come indicizzabili un massimo di 50 campi. I campi definiti dall'utente non sono indicizzabili per impostazione predefinita, ad eccezione dei campi contenenti il campo keyPropertyMapping. Per rendere indicizzabile un campo, includi "indexable": true con il campo.

  • dynamicFacetable. Indica che il campo può essere utilizzato come facet dinamico. Può essere impostato per i campi di tipo number, string, boolean e integer. Per rendere un campo facettabile dinamicamente, deve anche essere indicizzabile: includi "dynamicFacetable": true e "indexable": true con il campo.

  • searchable. Indica se questo campo può essere indicizzato in modo inverso per corrispondere alle query di testo non strutturato. Questo valore può essere impostato solo per i campi di tipo string. È possibile impostare un massimo di 50 campi come ricercabili. I campi definiti dall'utente non sono disponibili per la ricerca per impostazione predefinita, ad eccezione dei campi contenenti il campo keyPropertyMapping. Per rendere un campo ricercabile, includi "searchable": true nel campo.

  • completable. Indica se questo campo può essere restituito come suggerimento di completamento automatico. Questo valore può essere impostato solo per i campi di tipo string. Per rendere un campo completabile, includi "completable": true nel campo.

Fornisci il tuo schema come oggetto JSON

Per fornire il tuo schema, crea un datastore che contiene uno schema vuoto, quindi aggiorna lo schema fornendolo come oggetto JSON. Segui questi passaggi:

  1. Prepara lo schema come oggetto JSON, utilizzando lo schema di esempio come oggetto JSON come guida.

  2. Crea un datastore.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DATA_STORE_DISPLAY_NAME",
      "industryVertical": "INDUSTRY_VERTICAL"
    }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto.
    • DATA_STORE_ID: l'ID del datastore che vuoi creare. Questo ID può contenere solo lettere minuscole, cifre, trattini bassi e trattini.
    • DATA_STORE_DISPLAY_NAME: il nome visualizzato del datastore che vuoi creare.
    • INDUSTRY_VERTICAL: GENERIC
  3. Utilizza il metodo API schemas.patch per fornire il nuovo schema JSON come oggetto JSON.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/schemas/default_schema" \
    -d '{
      "structSchema": JSON_SCHEMA_OBJECT
    }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto.
    • DATA_STORE_ID: l'ID del datastore.
    • JSON_SCHEMA_OBJECT: il nuovo schema JSON come oggetto JSON. Ad esempio:

      {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "keyPropertyMapping": "title"
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string",
              "keyPropertyMapping": "category"
            }
          },
          "uri": {
            "type": "string",
            "keyPropertyMapping": "uri"
          }
        }
      }
  4. (Facoltativo) Esamina lo schema seguendo la procedura Visualizza una definizione di schema.

Passaggi successivi