Creare e registrare uno schema

Uno schema di Google Cloud Search è una struttura JSON che definisce gli oggetti, le proprietà e le opzioni da utilizzare per l'indicizzazione e l'esecuzione di query sui dati. Il connettore dei contenuti legge i dati dal repository e, in base allo schema registrato, li struttura e li indicizza.

Puoi creare uno schema fornendo un oggetto schema JSON all'API e poi registrandolo. Prima di poter indicizzare i dati, devi registrare un oggetto schema per ogni repository.

Questo documento illustra le nozioni di base sulla creazione dello schema. Per informazioni su come ottimizzare lo schema per migliorare l'esperienza di ricerca, consulta Migliorare la qualità della ricerca.

Crea uno schema

Di seguito è riportato un elenco dei passaggi utilizzati per creare lo schema di Cloud Search:

  1. Identifica il comportamento dell'utente previsto
  2. Inizializzare un'origine dati
  3. Creare uno schema
  4. Schema di esempio completo
  5. Registrare lo schema
  6. Indicizzare i dati
  7. Testare lo schema
  8. Ottimizzare lo schema

Identificare il comportamento dell'utente previsto

Anticipare i tipi di query che gli utenti eseguono ti aiuta a indirizzare la tua strategia per la creazione dello schema.

Ad esempio, quando esegui query su un database di film, potresti prevedere che un utente effettui una query come "Fammi vedere tutti i film con Robert Redford". Pertanto, lo schema deve supportare i risultati delle query in base a "tutti i film con un attore specifico".

Per definire lo schema in modo che rifletta i modelli di comportamento degli utenti, valuta la possibilità di svolgere queste attività:

  1. Valutare un insieme diverso di query desiderate da utenti diversi.
  2. Identifica gli oggetti che potrebbero essere utilizzati nelle query. Gli oggetti sono set logici di dati correlati, ad esempio un film in un database di film.
  3. Identifica le proprietà e i valori che compongono l'oggetto e che potrebbero essere utilizzati nelle query. Le proprietà sono gli attributi indicizzati dell'oggetto; possono includere valori primitivi o altri oggetti. Ad esempio, un oggetto movie potrebbe avere proprietà come il titolo e la data di uscita del film come valori primitivi. L'oggetto movie potrebbe contenere anche altri oggetti, come i membri del cast, che hanno le proprie proprietà, come il nome o il ruolo.
  4. Identifica esempi di valori validi per le proprietà. I valori sono i dati effettivi indicizzati per una proprietà. Ad esempio, il titolo di un film nel tuo database potrebbe essere "I predatori dell'arca perduta".
  5. Determina le opzioni di ordinamento e ranking desiderate dagli utenti. Ad esempio, quando eseguono query sui film, gli utenti potrebbero voler ordinare in ordine cronologico e classificare in base alla valutazione del pubblico e non è necessario ordinare in ordine alfabetico per titolo.
  6. (Facoltativo) Valuta se una delle tue proprietà rappresenta un contesto più specifico in cui potrebbero essere eseguite le ricerche, ad esempio il ruolo o il reparto degli utenti, in modo che i suggerimenti di completamento automatico possano essere forniti in base al contesto. Ad esempio, le persone che cercano un database di film potrebbero essere interessate solo a un determinato genere di film. Gli utenti possono definire il genere di risultati che vogliono ottenere nelle ricerche, eventualmente all'interno del proprio profilo. Quando un utente inizia a digitare una query sui film, tra i suggerimenti di completamento automatico vengono suggeriti solo i film del suo genere preferito, ad esempio "film d'azione".
  7. Elenca questi oggetti, proprietà e valori di esempio che possono essere utilizzati nelle ricerche. Per informazioni dettagliate sull'utilizzo di questo elenco, consulta la sezione Definire le opzioni dell'operatore.

Inizializza l'origine dati

Un'origine dati rappresenta i dati di un repository che sono stati indicizzati e archiviati in Google Cloud. Per istruzioni su come inizializzare un'origine dati, consulta Gestire le origini dati di terze parti.

I risultati di ricerca di un utente vengono restituiti dall'origine dati. Quando un utente fa clic su un risultato di ricerca, Cloud Search lo indirizza all'articolo effettivo utilizzando l'URL fornito nella richiesta di indicizzazione.

Definisci gli oggetti

L'unità fondamentale dei dati in uno schema è l'oggetto, chiamato anche "oggetto schema", che è una struttura logica dei dati. In un database di film, una struttura logica dei dati è "movie". Un altro oggetto potrebbe essere "persona" per rappresentare il cast e la troupe coinvolti nel film.

Ogni oggetto in uno schema ha una serie di proprietà o attributi che lo descrivono, ad esempio il titolo e la durata di un film o il nome e la data di nascita di una persona. Le proprietà di un oggetto possono includere valori primitivi o altri oggetti.

La Figura 1 mostra gli oggetti Movie e Person e le proprietà associate.

Disegno delle connessioni dello schema tra le entità
Figura 1. Uno schema di esempio che mostra due oggetti e un oggetto secondario.

Uno schema di Cloud Search è essenzialmente un elenco di istruzioni di definizione degli oggetti definite all'interno del tag objectDefinitions. Lo snippet di schema seguente mostra le istruzioni objectDefinitions per gli oggetti dello schema di film e persona.

{
  "objectDefinitions": [
    {
      "name": "movie",
      ...
    },
    {
      "name": "person",
      ...
    }
  ]
}

Quando definisci un oggetto dello schema, fornisci un name per l'oggetto che deve essere unico tra tutti gli altri oggetti dello schema. In genere, utilizzerai un valore name che descrive l'oggetto, ad esempio movie per un oggetto Movie. Il servizio schema utilizza il campo name come identificatore della chiave per gli oggetti indicizzati. Per maggiori informazioni sul campo name, consulta la definizione dell'oggetto.

Definire le proprietà degli oggetti

Come specificato nella documentazione di riferimento per ObjectDefinition, il nome dell'oggetto è seguito da un insieme di options e da un elenco di propertyDefinitions. options può essere costituito anche da freshnessOptions e displayOptions. I valori freshnessOptions vengono utilizzati per modificare il ranking nei risultati di ricerca in base all'aggiornamento di un articolo. I valori displayOptions vengono utilizzati per definire se etichette e proprietà specifiche devono essere visualizzate nei risultati di ricerca di un oggetto.

La sezione propertyDefinitions è dove definisci le proprietà di un oggetto, ad esempio il titolo del film e la data di uscita.

Lo snippet seguente mostra l'oggetto movie con due proprietà: movieTitle e releaseDate.

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "movieTitle",
          "isReturnable": true,
          "isWildcardSearchable": true,
          "textPropertyOptions": {
            "retrievalImportance": { "importance": "HIGHEST" },
            "operatorOptions": {
              "operatorName": "title"
            }
          },
          "displayOptions": {
            "displayLabel": "Title"
          }
        },
        {
          "name": "releaseDate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "released",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          },
          "displayOptions": {
            "displayLabel": "Release date"
          }
      ...
      ]
    }
  ]
}

PropertyDefinition è costituito dai seguenti elementi:

  • una stringa name.
  • Un elenco di opzioni indipendenti dal tipo, come isReturnable nello snippet precedente.
  • Un tipo e le relative opzioni specifiche, come textPropertyOptions e retrievalImportance nello snippet precedente.
  • Un operatorOptions che descrive come la proprietà viene utilizzata come operatore di ricerca.
  • Uno o più displayOptions, ad esempio displayLabel nello snippet precedente.

Il name di una proprietà deve essere univoco all'interno dell'oggetto contenitore, ma lo stesso nome può essere utilizzato in altri oggetti e oggetti secondari. Nella Figura 1, il titolo e la data di uscita del film sono stati definiti due volte: una volta nell'oggetto movie e di nuovo nell'oggetto secondario filmography dell'oggetto person. Questo schema riutilizza il campo movieTitle in modo da supportare due tipi di comportamenti di ricerca:

  • Mostra i risultati relativi ai film quando gli utenti cercano il titolo di un film.
  • Mostrare i risultati relativi alle persone quando gli utenti cercano il titolo di un film interpretato da un attore.

Analogamente, lo schema riutilizza il campo releaseDate perché ha lo stesso significato per i due campi movieTitle.

Durante lo sviluppo del tuo schema, valuta se il tuo repository potrebbe avere campi correlati contenenti dati che vuoi dichiarare più volte nello schema.

Aggiungere opzioni indipendenti dal tipo

PropertyDefinition elenca le opzioni di funzionalità di ricerca generale comuni a tutte le proprietà, indipendentemente dal tipo di dati.

  • isReturnable: indica se la proprietà identifica i dati che devono essere restituito nei risultati di ricerca tramite l'API Query. Tutte le proprietà del film di esempio sono restituibili. Le proprietà non restituibili potrebbero essere utilizzate per la ricerca o il ranking dei risultati senza essere restituite all'utente.
  • isRepeatable: indica se sono consentiti più valori per la proprietà. Ad esempio, un film ha una sola data di uscita, ma può avere più attori.
  • isSortable: indica che la proprietà può essere utilizzata per l'ordinamento. Questo non può essere vero per le proprietà ripetibili. Ad esempio, i risultati relativi ai film possono essere ordinati in base alla data di uscita o alla classificazione del pubblico.
  • isFacetable: indica che la proprietà può essere utilizzata per generare facet. Un facet viene utilizzato per perfezionare i risultati di ricerca, in modo che l'utente visualizzi i risultati iniziali e poi aggiunga criteri o facet per perfezionarli ulteriormente. Questa opzione non può essere vera per le proprietà di tipo object e isReturnable deve essere true per impostarla. Infine, questa opzione è supportata solo per le proprietà enum, boolean e di testo. Ad esempio, nel nostro schema di esempio potremmo rendere tabellabili genre, actorName, userRating e mpaaRating per consentirne l'utilizzo per il perfezionamento interattivo dei risultati di ricerca.
  • isWildcardSearchable indica che gli utenti possono eseguire ricerche con caratteri jolly per questa proprietà. Questa opzione è disponibile solo per le proprietà di testo. Il funzionamento della ricerca con caratteri jolly nel campo di testo dipende dal valore impostato nel campo exactMatchWithOperator. Se exactMatchWithOperator è impostato su true, il valore del testo viene tokenizzato come un valore atomico e viene eseguita una ricerca con caratteri jolly su di esso. Ad esempio, se il valore del testo è science-fiction, una query con caratteri jolly science-* corrisponde. Se exactMatchWithOperator è impostato su false, il valore del testo viene tokenizzato e viene eseguita una ricerca con caratteri jolly su ogni token. Ad esempio, se il valore del testo è "fantascienza", le query con caratteri jolly sci* o fi* corrispondono all'elemento, ma science-* non corrisponde.

Questi parametri di funzionalità di ricerca generale sono tutti valori booleani; tutti hanno un valore predefinito di false e devono essere impostati su true per essere utilizzati.

La tabella seguente mostra i parametri booleani impostati su true per tutte le proprietà dell'oggetto movie:

Proprietà isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle true true
releaseDate true true
genre true true true
duration true
actorName true true true true
userRating true true
mpaaRating true true

Sia genre che actorName hanno isRepeatable impostato su true perché un film può appartenere a più di un genere e in genere ha più di un attore. Una proprietà non può essere ordinata se è ripetibile o contenuta in un sottooggetto ripetibile.

Definisci tipo

La sezione di riferimento PropertyDefinition elenca diversi xxPropertyOptions, dove xx è un tipo specifico, come boolean. Per impostare il tipo di dati della proprietà, devi definire l'oggetto di tipo di dati appropriato. La definizione di un oggetto di tipo di dati per una proprietà stabilisce il tipo di dati della proprietà. Ad esempio, la definizione di textPropertyOptions per la proprietà movieTitle indica che il titolo del film è di tipo testo. Lo snippet seguente mostra la proprietà movieTitle con textPropertyOptions che imposta il tipo di dati.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    ...
  },
  ...
},

Una proprietà può avere un solo tipo di dati associato. Ad esempio, nel nostro schema di film, releaseDate può essere solo una data (ad es. 2016-01-13) o una stringa (ad es. January 13, 2016), ma non entrambi.

Di seguito sono riportati gli oggetti di tipo di dati utilizzati per specificare i tipi di dati per le proprietà nello schema del film di esempio:

Proprietà Oggetto tipo di dati
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

Il tipo di dati scelto per la proprietà dipende dai casi d'uso previsti. Nello scenario immaginato di questo schema di film, si prevede che gli utenti vogliano ordinare i risultati in ordine cronologico, quindi releaseDate è un oggetto data. Se, ad esempio, esiste un caso d'uso previsto per il confronto delle release di dicembre tra gli anni con le release di gennaio, potrebbe essere utile un formato di stringa.

Configurare le opzioni specifiche per tipo

La sezione di riferimento PropertyDefinition contiene i link alle opzioni per ogni tipo. La maggior parte delle opzioni specifiche per tipo è facoltativa, ad eccezione dell'elenco di possibleValues in enumPropertyOptions. Inoltre, l'opzione orderedRanking ti consente di classificare i valori rispetto a un altro. Il seguente snippet mostra la proprietà movieTitle con textPropertyOptions che imposta il tipo di dati e con l'opzione specifica per il tipo retrievalImportance.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    ...
  },
  ...
}

Di seguito sono riportate le opzioni aggiuntive specifiche per tipo utilizzate nello schema di esempio:

Proprietà Tipo Opzioni specifiche per tipo
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking, maximumValue
mpaaRating textPropertyOptions

Definisci le opzioni dell'operatore

Oltre alle opzioni specifiche per tipo, ogni tipo ha un insieme di opzioni facoltative.operatorOptions Queste opzioni descrivono come la proprietà viene utilizzata come operatore di ricerca. Lo snippet seguente mostra la proprietà movieTitle con textPropertyOptions che imposta il tipo di dati e con le opzioni specifiche per i tipi retrievalImportance e operatorOptions.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
      "operatorName": "title"
    }
  },
  ...
}

Ogni operatorOptions ha un operatorName, ad esempio title per un movieTitle. Il nome dell'operatore è l'operatore di ricerca per la proprietà. Un operatore di ricerca è il parametro effettivo che prevedi che gli utenti utilizzino quando restringono una ricerca. Ad esempio, per cercare i film in base al titolo, l'utente deve digitare title:movieName, dove movieName è il nome di un film.

I nomi degli operatori non devono corrispondere al nome della proprietà. Devi invece utilizzare nomi di operatori che riflettano le parole più comuni utilizzate dagli utenti della tua organizzazione. Ad esempio, se i tuoi utenti preferiscono il termine "nome" anziché "titolo" per il titolo di un film, il nome dell'operatore deve essere impostato su "nome".

Puoi utilizzare lo stesso nome di operatore per più proprietà, a condizione che tutte le proprietà abbiano lo stesso tipo. Quando utilizzi un nome operatore condiviso durante una query, vengono recuperate tutte le proprietà che utilizzano quel nome operatore. Ad esempio, supponiamo che l'oggetto movie abbia proprietà plotSummary e plotSynopsis e che ciascuna di queste proprietà abbia un operatorName di plot. Se entrambe le proprietà sono di tipo testo (textPropertyOptions), una singola query che utilizza l'operatore di ricerca plot le recupera entrambe.

Oltre a operatorName, le proprietà ordinate possono avere campi lessThanOperatorName e greaterThanOperatorName in operatorOptions. Gli utenti possono utilizzare queste opzioni per creare query in base a confronti con un valore inviato.

Infine, textOperatorOptions ha un campo exactMatchWithOperator in operatorOptions. Se impostate exactMatchWithOperator su true, la stringa di query deve corrispondere all'intero valore della proprietà, non solo essere presente nel testo. Il valore di testo viene trattato come un valore atomico nelle ricerche con operatori e nelle corrispondenze dei componenti.

Ad esempio, valuta la possibilità di indicizzare gli oggetti Libro o Film con proprietà di genere. I generi possono includere "Fantascienza", "Scienza" e "Narrativa". Se exactMatchWithOperator è impostato su false o omesso, la ricerca di un genere o la selezione della sfaccettatura "Scienza" o "Ficción" restituirà anche risultati per "Scienza-Ficción", poiché il testo è tokenizzato e i token "Scienza" e "Ficción" esistono in "Scienza-Ficción". Quando exactMatchWithOperator è true, il testo viene trattato come un singolo token, pertanto né "Scienza" né "Ficción" corrisponde a "Scienza-Ficción".

(Facoltativo) Aggiungi la sezione displayOptions

Alla fine di ogni sezione propertyDefinition è presente una sezione displayOptions facoltativa. Questa sezione contiene una stringa displayLabel. displayLabel è un'etichetta di testo consigliata e facile da usare per la proprietà. Se la proprietà è configurata per la visualizzazione utilizzando ObjectDisplayOptions, questa etichetta viene visualizzata davanti alla proprietà. Se la proprietà è configurata per la visualizzazione e displayLabel non è definito, viene visualizzato solo il valore della proprietà.

Lo snippet seguente mostra la proprietà movieTitle con un displayLabel impostato su "Titolo".

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
       "operatorName": "title"
    }
},
  "displayOptions": {
    "displayLabel": "Title"
  }
},

Di seguito sono riportati i valori displayLabel per tutte le proprietà dell'oggetto movie nello schema di esempio:

Proprietà displayLabel
movieTitle Title
releaseDate Release date
genre Genre
duration Run length
actorName Actor
userRating Audience score
mpaaRating MPAA rating

(Facoltativo) Aggiungi la sezione suggestionFilteringOperators[]

Alla fine di ogni sezione propertyDefinition è presente una sezione facoltativa suggestionFilteringOperators[]. Utilizza questa sezione per definire una proprietà utilizzata per filtrare i suggerimenti di completamento automatico. Ad esempio, potresti definire l'operatore di genre per filtrare i suggerimenti in base al genere di film preferito dall'utente. Quando l'utente digita la query di ricerca, tra i suggerimenti di completamento automatico vengono visualizzati solo i film corrispondenti al suo genere preferito.

Registra lo schema

Per fare in modo che i dati strutturati vengano restituiti dalle query di Cloud Search, devi registrare lo schema con il servizio di schema di Cloud Search. La registrazione di uno schema richiede l'ID origine dati ottenuto durante il passaggio Eseguire l'inizializzazione di un'origine dati.

Utilizzando l'ID origine dati, invia una richiesta UpdateSchema per registrare lo schema.

Come descritto nella pagina di riferimento UpdateSchema, invia la seguente richiesta HTTP per registrare lo schema:

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

Il corpo della richiesta deve contenere quanto segue:

{
  "validateOnly": // true or false,
  "schema": {
    // ... Your complete schema object ...
  }
}

Utilizza l'opzione validateOnly per testare la validità dello schema senza registrarlo effettivamente.

Indicizzare i dati

Una volta registrato lo schema, compila l'origine dati utilizzando le chiamate Index. L'indicizzazione viene in genere eseguita all'interno del connettore dei contenuti.

Utilizzando lo schema del film, una richiesta di indicizzazione dell'API REST per un singolo film sarà simile alla seguente:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "acl": {
    "readers": [
      {
        "gsuitePrincipal": {
          "gsuiteDomain": true
        }
      }
    ]
  },
  "metadata": {
    "title": "Titanic",
    "sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [
        {
          "name": "movieTitle",
          "textValues": {
            "values": [
              "Titanic"
            ]
          }
        },
        {
          "name": "releaseDate",
          "dateValues": {
            "values": [
              {
                "year": 1997,
                "month": 12,
                "day": 19
              }
            ]
          }
        },
        {
          "name": "actorName",
          "textValues": {
            "values": [
              "Leonardo DiCaprio",
              "Kate Winslet",
              "Billy Zane"
            ]
          }
        },
        {
          "name": "genre",
          "enumValues": {
            "values": [
              "Drama",
              "Action"
            ]
          }
        },
        {
          "name": "userRating",
          "integerValues": {
            "values": [
              8
            ]
          }
        },
        {
          "name": "mpaaRating",
          "textValues": {
            "values": [
              "PG-13"
            ]
          }
        },
        {
          "name": "duration",
          "textValues": {
            "values": [
              "3 h 14 min"
            ]
          }
        }
      ]
    }
  },
  "content": {
    "inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
    "contentFormat": "TEXT"
  },
  "version": "01",
  "itemType": "CONTENT_ITEM"
}

Nota come il valore di movie nel campo objectType corrisponda al nome della definizione dell'oggetto nello schema. Abbinando questi due valori, Cloud Search sa quale oggetto dello schema utilizzare durante l'indicizzazione.

Inoltre, tieni presente che l'indicizzazione della proprietà dello schema releaseDate utilizza le proprietà secondarie di year, month e day che eredita perché è definita come tipo di dati date tramite l'utilizzo di datePropertyOptions per definirla. Tuttavia, poiché year, month e day non sono definiti nello schema, non puoi eseguire query su una di queste proprietà (ad es. year) singolarmente.

Inoltre, tieni presente come la proprietà ripetibile actorName viene indicizzata utilizzando un elenco di valori.

Identificare potenziali problemi di indicizzazione

I due problemi più comuni relativi a schemi e indicizzazione sono:

  • La richiesta di indicizzazione contiene un nome di proprietà o di oggetto dello schema che non è stato registrato con il servizio dello schema. Questo problema causa l'ignoranza della proprietà o dell'oggetto.

  • La richiesta di indicizzazione ha una proprietà con un valore di tipo diverso da quello registrato nello schema. Questo problema fa sì che Cloud Search restituisca un errore al momento dell'indicizzazione.

Testare lo schema con diversi tipi di query

Prima di registrare lo schema per un repository di dati di produzione di grandi dimensioni, valuta la possibilità di eseguire il test con un repository di dati di test più piccolo. I test con un repository di test più piccolo ti consentono di apportare rapidamente modifiche allo schema ed eliminare i dati indicizzati senza influire su un indice più grande o su un indice di produzione esistente. Per un repository di dati di test, crea un'ACL che autorizzi solo un utente di test in modo che gli altri utenti non vedano questi dati nei risultati di ricerca.

Per creare un'interfaccia di ricerca per convalidare le query di ricerca, consulta L'interfaccia di ricerca

Questa sezione contiene diversi esempi di query che potresti utilizzare per testare un schema di film.

Esegui il test con una query generica

Una query generica restituisce tutti gli elementi dell'origine dati contenenti una stringa specifica. Utilizzando un'interfaccia di ricerca, puoi eseguire una query generica su un'origine dati di film digitando la parola "Titanic" e premendo Invio. Tutti i film con la parola "Titanic" dovrebbero essere restituiti nei risultati di ricerca.

Eseguire il test con un operatore

L'aggiunta di un operatore alla query limita i risultati agli elementi corrispondenti al valore dell'operatore. Ad esempio, potresti utilizzare l'operatore actor per trovare tutti i film con un attore specifico. Utilizzando un'interfaccia di ricerca, puoi eseguire questa query sull'operatore semplicemente digitando una coppia operatore=valore, ad esempio "attore:Zane", e premendo Invio. Tutti i film con Zane come attore dovrebbero essere restituiti nei risultati di ricerca.

Ottimizza lo schema

Una volta che lo schema e i dati sono in uso, continua a monitorare cosa funziona e cosa non funziona per gli utenti. Ti consigliamo di modificare lo schema per le seguenti situazioni:

  • Indicizzazione di un campo che non era stato precedentemente indicizzato. Ad esempio, gli utenti potrebbero cercare ripetutamente film in base al nome del regista, quindi potresti modificare lo schema in modo da supportare il nome del regista come operatore.
  • Modifica dei nomi degli operatori di ricerca in base al feedback degli utenti. I nomi degli operatori devono essere facili da ricordare. Se gli utenti "ricordano" costantemente il nome sbagliato dell'operatore, ti consigliamo di cambiarlo.

Reindicizzazione dopo una modifica dello schema

La modifica di uno dei seguenti valori nello schema non richiede la reindicizzazione dei dati. Puoi semplicemente inviare una nuova richiesta UpdateSchema e l'indice continuerà a funzionare:

  • Nomi degli operatori.
  • Valori minimo e massimo interi.
  • Classifica ordinata di numeri interi ed enum.
  • Opzioni di aggiornamento.
  • Opzioni di visualizzazione.

Per le seguenti modifiche, i dati indicizzati in precedenza continueranno a funzionare in base allo schema registrato in precedenza. Tuttavia, devi indicizzare nuovamente le voci esistenti per visualizzare le modifiche in base allo schema aggiornato se contiene le seguenti modifiche:

  • Aggiunta o rimozione di una nuova proprietà o di un nuovo oggetto
  • Modifica di isReturnable, isFacetable o isSortable da false a true.

Devi impostare isFacetable o isSortable su true solo se hai un caso d'uso e un bisogno chiari.

Infine, quando aggiorni lo schema contrassegnando una proprietà isSuggestable, devi indicizzare nuovamente i dati, il che causa un ritardo nell'utilizzo del completamento automatico per la proprietà in questione.

Modifiche alle proprietà non consentite

Alcune modifiche allo schema non sono consentite, anche se esegui la reindicizzazione dei dati, perché compromettono l'indice o producono risultati di ricerca scadenti o incoerenti. Tra queste modifiche:

  • Tipo di dati della proprietà.
  • Nome della proprietà.
  • exactMatchWithOperator.
  • retrievalImportance.

Tuttavia, esiste un modo per aggirare questa limitazione.

Apportare una modifica complessa allo schema

Per evitare modifiche che potrebbero generare risultati di ricerca scadenti o un indice di ricerca danneggiato, Cloud Search impedisce determinati tipi di modifiche nelle richieste UpdateSchema dopo l'indicizzazione del repository. Ad esempio, il tipo di dato o il nome di una proprietà non possono essere modificati dopo essere stati impostati. Queste modifiche non possono essere apportate tramite una semplice richiesta UpdateSchema, anche se indicizzi nuovamente i dati.

Nelle situazioni in cui devi apportare una modifica non consentita allo schema, spesso puoi apportare una serie di modifiche consentite che ottengono lo stesso effetto. In genere, questa operazione prevede innanzitutto la migrazione delle proprietà indicizzate da una definizione di oggetto precedente a una più recente, per poi inviare una richiesta di indicizzazione che utilizzi solo la proprietà più recente.

I passaggi riportati di seguito mostrano come modificare il tipo di dati o il nome di una proprietà:

  1. Aggiungi una nuova proprietà alla definizione dell'oggetto nello schema. Utilizza un nome diverso rispetto alla proprietà che vuoi modificare.
  2. Esegui la richiesta UpdateSchema con la nuova definizione. Ricordati di inviare l'intero schema, incluse sia la proprietà nuova che quella vecchia, nella richiesta.
  3. Esegui il backfill dell'indice dal repository di dati. Per eseguire il backfill dell'indice, invia tutte le richieste di indicizzazione utilizzando la nuova proprietà, non la vecchia proprietà, poiché ciò comporterebbe il conteggio doppio delle corrispondenze delle query.

    1. Durante il backfill dell'indicizzazione, controlla la nuova proprietà e imposta come predefinita la vecchia proprietà per evitare un comportamento incoerente.
    2. Al termine del backfill, esegui query di test per verificare.
  4. Elimina la vecchia proprietà. Invia un'altra richiesta UpdateSchema senza il nome della proprietà precedente e interrompi l'utilizzo del nome della proprietà precedente nelle richieste di indicizzazione future.

  5. Esegui la migrazione di qualsiasi utilizzo della vecchia proprietà alla nuova. Ad esempio, se cambi il nome della proprietà da creator ad autore, devi aggiornare il codice query in modo da utilizzare autore dove in precedenza faceva riferimento a creator.

Ricerca Cloud conserva un record di qualsiasi proprietà o oggetto eliminato per 30 giorni per proteggerti da eventuali utilizzi impropri che potrebbero causare risultati di indicizzazione imprevisti. Entro 30 giorni, devi eseguire la migrazione da tutto l'utilizzo dell'oggetto o della proprietà eliminati, inclusa la loro omissione dalle richieste di indicizzazione future. In questo modo, se in un secondo momento decidi di reintegrare la proprietà o l'oggetto, puoi farlo in modo da mantenere la correttezza dell'indice.

Conoscere i limiti di dimensione

Cloud Search impone limiti alle dimensioni degli oggetti e degli schemi di dati strutturati. Questi limiti sono:

  • Il numero massimo di oggetti di primo livello è 10.
  • La profondità massima di una gerarchia di dati strutturati è di 10 livelli.
  • Il numero totale di campi in un oggetto è limitato a 1000, incluso il numero di campi primitivi più la somma del numero di campi in ogni oggetto nidificato.

Passaggi successivi

Ecco alcuni passaggi successivi che puoi eseguire:

  1. Crea un'interfaccia di ricerca per testare lo schema.

  2. Ottimizza lo schema per migliorare la qualità della ricerca.

  3. Strutturare uno schema per un'interpretazione ottimale delle query.

  4. Scopri come sfruttare lo schema _dictionaryEntry per definire sinonimi per i termini comunemente utilizzati nella tua azienda. Per utilizzare lo schema _dictionaryEntry, consulta Definire i sinonimi.

  5. Crea un connettore.