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 di 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. Devi registrare un oggetto schema per ciascuno dei tuoi repository prima di poter indicizzare i dati.

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

Crea uno schema

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

  1. Identificare il comportamento previsto degli utenti
  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. Modificare lo schema

Identificare il comportamento previsto degli utenti

Prevedere i tipi di query degli utenti ti aiuta a definire la tua strategia per la creazione dello schema.

Ad esempio, se invii query su un database di film, potresti prevedere che l'utente faccia una query come "Fammi vedere tutti i film con Robert Redford". Di conseguenza, lo schema deve supportare i risultati delle query basate su "tutti i film con un attore specifico".

Per definire lo schema in modo che rifletta i pattern di comportamento dell'utente, puoi eseguire queste attività:

  1. Valutare un insieme variegato di query desiderate da parte di utenti diversi.
  2. Identifica gli oggetti che potrebbero essere utilizzati nelle query. Gli oggetti sono insiemi 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 indicizzabili dell'oggetto; possono includere valori primitivi o altri oggetti. Ad esempio, un oggetto filmato potrebbe avere proprietà come il titolo e la data di uscita del film come valori primitivi. L'oggetto film potrebbe contenere anche altri oggetti, come i membri del cast, che hanno proprietà proprie, come il nome o il ruolo.
  4. Identifica valori di esempio validi per le proprietà. I valori sono i dati effettivi indicizzati per una proprietà. Ad esempio, il titolo di un film nel database potrebbe essere "I predatori dell'arca perduta".
  5. Stabilisci le opzioni di ordinamento e ranking desiderate dagli utenti. Ad esempio, quando eseguono query sui film, gli utenti potrebbero voler ordinare cronologicamente e classificarsi in base alla valutazione del pubblico, senza dover ordinare alfabeticamente per titolo.
  6. (Facoltativo) Valuta se una delle tue proprietà rappresenta un contesto più specifico in cui potrebbero essere eseguite 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, gli utenti che cercano un database di film potrebbero essere interessati solo a un determinato genere di film. Gli utenti possono definire il genere che vogliono che le loro ricerche restituiscano, possibilmente all'interno del loro profilo utente. Quando un utente inizia a digitare una query di film, vengono suggeriti solo i film del genere preferito, ad esempio "film d'azione", nei suggerimenti di completamento automatico.
  7. Crea un elenco di questi oggetti, proprietà e valori di esempio che possono essere utilizzati nelle ricerche. Per maggiori dettagli sull'utilizzo di questo elenco, consulta la sezione Definire le opzioni dell'operatore.

Inizializzare l'origine dati

Un'origine dati rappresenta i dati di un repository che è stato indicizzato e archiviato 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'elemento 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 filmati, una struttura logica dei dati è "movie". Un altro oggetto potrebbe essere la "persona" che rappresenta il cast e la troupe coinvolti nel film.

Ogni oggetto di uno schema possiede una serie di proprietà o attributi che descrivono l'oggetto, come 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 Persona e Filmati e le proprietà associate.

Disegno delle connessioni schema tra 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. Il seguente snippet di schema mostra le istruzioni objectDefinitions per gli oggetti schema Persona e Film.

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

Quando definisci un oggetto dello schema, fornisci un valore name per l'oggetto che deve essere univoco tra tutti gli altri oggetti nello schema. In genere, utilizzerai un valore name che descrive l'oggetto, come movie per l'oggetto di un film. Il servizio schema utilizza il campo name come identificatore chiave per gli oggetti indicizzabili. Per ulteriori informazioni sul campo name, consulta la Definizione dell'oggetto.

Definisci le proprietà degli oggetti

Come specificato nel riferimento per ObjectDefinition, il nome dell'oggetto è seguito da un insieme di options e da un elenco di propertyDefinitions. L'elemento options può essere composto anche da freshnessOptions e displayOptions. Gli elementi freshnessOptions vengono utilizzati per modificare il ranking di ricerca in base all'aggiornamento di un articolo. Gli elementi displayOptions vengono utilizzati per definire se etichette e proprietà specifiche vengono visualizzate nei risultati di ricerca di un oggetto.

Nella sezione propertyDefinitions puoi definire le proprietà di un oggetto, ad esempio il titolo e la data di uscita del film.

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 per il tipo associate, ad esempiotextPropertyOptions e retrievalImportance nello snippet precedente.
  • Un elemento 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 che possa supportare due tipi di comportamenti di ricerca:

  • Mostra i risultati relativi ai film quando gli utenti cercano il titolo di un film.
  • Mostra risultati relativi alle persone quando gli utenti cercano il titolo di un film in cui ha recitato un attore.

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

Durante lo sviluppo di uno schema personalizzato, valuta in che modo il repository potrebbe avere campi correlati contenenti dati che vuoi dichiarare più di una volta nello schema.

Aggiungi opzioni indipendenti dal tipo

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

  • isReturnable. Indica se la proprietà identifica i dati che devono essere restituiti nei risultati di ricerca tramite l'API Query. Tutte le proprietà film di esempio possono essere restituite. Le proprietà non restituibili possono essere utilizzate per cercare o posizionare i risultati senza essere restituiti all'utente.
  • isRepeatable. Indica se per la proprietà sono consentiti più valori. 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 dei film possono essere ordinati per data di uscita o valutazione del pubblico.
  • isFacetable. Indica che la proprietà può essere utilizzata per generare facets. Un facet viene utilizzato per perfezionare i risultati di ricerca, in cui l'utente vede i risultati iniziali e poi aggiunge criteri, o facet, per perfezionare ulteriormente questi risultati. Questa opzione non può essere true per le proprietà il cui tipo è oggetto e isReturnable deve essere true per poter impostare questa opzione. Infine, questa opzione è supportata solo per le proprietà enum, booleane e di testo. Ad esempio, nel nostro schema di esempio, potremmo rendere in facet 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 nelle 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 di testo viene tokenizzato come un valore atomico e viene eseguita una ricerca con caratteri jolly. Ad esempio, se il valore di testo è science-fiction, una query con caratteri jolly science-* lo associa. Se exactMatchWithOperator è impostato su false, il valore di testo viene tokenizzato e viene eseguita una ricerca con caratteri jolly su ciascun token. Ad esempio, se il valore di testo è "fantascienza", le query con caratteri jolly sci* o fi* corrispondono all'elemento, ma science-* non corrisponde.

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

La seguente tabella 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 sono stati isRepeatable impostati 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 oggetto secondario ripetibile.

Definisci tipo

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

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

Una proprietà può avere un solo tipo di dati associato. Ad esempio, nel nostro schema per i filmati, 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 dei tipi di dati utilizzati per specificare i tipi di dati per le proprietà nello schema di filmati di esempio:

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

Il tipo di dati che scegli per la proprietà dipende dai casi d'uso previsti. Nello scenario immaginario di questo schema di filmati, gli utenti dovrebbero ordinare i risultati in ordine cronologico, quindi releaseDate è un oggetto data. Se, ad esempio, si prevedesse un caso d'uso di confronto tra le release di dicembre degli anni con le release di gennaio, potrebbe essere utile un formato stringa.

Configurare opzioni specifiche per il tipo

La sezione di riferimento di PropertyDefinition rimanda alle opzioni per ogni tipo. La maggior parte delle opzioni specifiche per tipo è opzionale, ad eccezione dell'elenco di possibleValues in enumPropertyOptions. Inoltre, l'opzione orderedRanking consente di classificare i valori gli uni rispetto agli altri. Lo snippet seguente mostra la proprietà movieTitle con textPropertyOptions che ha impostato 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 il 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 a opzioni specifiche per il 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 ha impostato il tipo di dati e con le opzioni specifiche per il tipo 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 ti aspetti venga utilizzato dagli utenti per restringere una ricerca. Ad esempio, per cercare film in base al titolo, l'utente deve digitare title:movieName, dove movieName è il nome del film.

I nomi degli operatori non devono essere necessariamente uguali a quelli della proprietà. Utilizza invece nomi di operatori che riflettano le parole più comuni utilizzate dagli utenti della tua organizzazione. Ad esempio, se gli utenti preferiscono il termine "name" anziché "title" per il titolo di un film, il nome dell'operatore dovrebbe essere impostato su "name".

Puoi utilizzare lo stesso nome dell'operatore per più proprietà, purché tutte le proprietà corrispondano allo stesso tipo. Quando utilizzi il nome di un operatore condiviso durante una query, vengono recuperate tutte le proprietà che utilizzano questo nome. Ad esempio, supponiamo che l'oggetto filmato avesse le proprietà plotSummary e plotSynopsis e che ciascuna di queste proprietà avesse un valore operatorName di plot. Finché entrambe queste proprietà sono testo (textPropertyOptions), una singola query con l'operatore di ricerca plot le recupera entrambe.

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

Infine, textOperatorOptions ha un campo exactMatchWithOperator in operatorOptions. Se imposti exactMatchWithOperator su true, la stringa di query deve corrispondere all'intero valore della proprietà, non semplicemente all'interno del testo. Il valore testuale viene considerato come un valore atomico nelle ricerche degli operatori e nelle corrispondenze facet.

Ad esempio, prendi in considerazione l'indicizzazione degli oggetti Book o Movie con proprietà genere. I generi potrebbero includere "Fantascienza", "Scienza" e "Narrazione". Se l'elemento exactMatchWithOperator è impostato su false o omesso, la ricerca di un genere o la selezione del facet "Scienza" o "Narrazione" restituiranno anche i risultati per "Fantascienza" poiché il testo viene tokenizzato e i token "Scienza" e "Narrazione" sono presenti in "Fantascienza". Quando exactMatchWithOperator è true, il testo viene considerato come un singolo token, quindi né "Scienza" né "Fiction" corrispondono a "Fantascienza".

(Facoltativo) Aggiungi la sezione displayOptions

Alla fine di ogni sezione propertyDefinition c'è 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 pubblicità display e displayLabel non è definita, viene visualizzato solo il valore della proprietà.

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

{
  "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 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, puoi definire l'operatore genre per filtrare i suggerimenti in base al genere di film preferito dall'utente. Quando l'utente digita la query di ricerca, vengono visualizzati solo i film corrispondenti al genere preferito nei suggerimenti di completamento automatico.

Registra lo schema

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

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

Come illustrato in dettaglio nella pagina di riferimento di UpdateSchema, esegui 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. In genere l'indicizzazione viene eseguita all'interno del connettore di contenuti.

Utilizzando lo schema del filmato, una richiesta di indicizzazione dell'API REST per un singolo filmato avrebbe il seguente aspetto:

{
  "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 corrisponde al nome della definizione dell'oggetto nello schema. Abbinando questi due valori, Cloud Search sa quale oggetto schema usare durante l'indicizzazione.

Nota inoltre come l'indicizzazione della proprietà schema releaseDate utilizza le proprietà secondarie year, month e day che eredita perché viene definita come tipo di dati date tramite l'uso di datePropertyOptions per la definizione. 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, nota come la proprietà ripetibile actorName viene indicizzata utilizzando un elenco di valori.

Identificare potenziali problemi di indicizzazione

I due problemi più comuni relativi agli schemi e all'indicizzazione sono:

  • La richiesta di indicizzazione contiene un oggetto schema o un nome di proprietà non registrato nel servizio schema. Questo problema fa sì che la proprietà o l'oggetto vengano ignorati.

  • La richiesta di indicizzazione ha una proprietà con un valore del 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. Eseguire test con un repository di test più piccolo consente 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 autorizza solo un utente di test in modo che gli altri utenti non vedano questi dati nei risultati della Ricerca.

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

Questa sezione contiene diverse query di esempio che puoi usare per testare lo schema di un film.

Esegui un test con una query generica

Una query generica restituisce tutti gli elementi nell'origine dati contenenti una stringa specifica. Utilizzando un'interfaccia di ricerca, potresti eseguire una query generica sull'origine dati di un film digitando la parola "titanic" e premendo Invio. Tutti i film che contengono la parola "titanic" devono essere restituiti nei risultati di ricerca.

Esegui il test con un operatore

L'aggiunta di un operatore alla query limita i risultati agli elementi che corrispondono al valore dell'operatore. Ad esempio, potresti usare l'operatore actor per trovare tutti i film con un attore specifico. Utilizzando un'interfaccia di ricerca, puoi eseguire la query con questo operatore semplicemente digitando una coppia operator=valore, ad esempio "actor:Zane", e premendo "actor:Zane". Tutti i film in cui Zane è un attore devono essere restituiti nei risultati di ricerca.

Ottimizza lo schema

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

  • Indicizzare un campo che non era stato indicizzato in precedenza. 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 usare. Se gli utenti "ricordano" costantemente il nome dell'operatore sbagliato, ti consigliamo di cambiarlo.

Reindicizzazione dopo una modifica allo schema

La modifica 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 minimi e massimi per il numero intero.
  • Ranking in numero intero ed enumerato.
  • Opzioni di aggiornamento.
  • Opzioni di visualizzazione.

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

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

Dovresti impostare isFacetable o isSortable in modo che sia true solo se hai un caso d'uso chiaro e una necessità.

Infine, quando aggiorni lo schema contrassegnando una proprietà isSuggestable, devi reindicizzare i dati, il che causa un ritardo nell'utilizzo del completamento automatico per quella proprietà.

Modifiche alle proprietà non consentite

Alcune modifiche allo schema non sono consentite, anche se reindicizzi i dati, perché danneggiano l'indice o producono risultati di ricerca scarsi o incoerenti. tra cui modifiche a:

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

Tuttavia, esiste un modo per ovviare a questa limitazione.

Apporta una modifica complessa allo schema

Per evitare modifiche che potrebbero generare risultati di ricerca di scarsa qualità o un indice di ricerca non funzionante, Cloud Search impedisce determinati tipi di modifiche nelle richieste UpdateSchema dopo l'indicizzazione del repository. Ad esempio, il tipo di dati o il nome di una proprietà non può essere modificato dopo essere stati impostati. Queste modifiche non possono essere ottenute tramite una semplice richiesta UpdateSchema, anche se reindicizzi i dati.

Nelle situazioni in cui devi apportare una modifica altrimenti non consentita allo schema, spesso puoi apportare una serie di modifiche consentite che hanno lo stesso effetto. In generale, ciò comporta prima la migrazione delle proprietà indicizzate da una definizione di oggetto meno recente a una più recente e l'invio di una richiesta di indicizzazione che utilizza solo la proprietà più recente.

I passaggi seguenti 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 da quello della proprietà da modificare.
  2. Invia la richiesta UpdateSchema con la nuova definizione. Ricordati di inviare nella richiesta l'intero schema, incluse le proprietà nuova e vecchia.
  3. Esegui il backfill dell'indice dal repository dei dati. Per eseguire il backfill dell'indice, invia tutte le richieste di indicizzazione utilizzando la nuova proprietà, ma non quella precedente, poiché ciò comporterebbe un doppio conteggio delle corrispondenze della query.

    1. Durante il backfill dell'indicizzazione, verifica la nuova proprietà e utilizza come valore predefinito la proprietà precedente per evitare comportamenti incoerenti.
    2. Al termine del backfill, esegui query di prova per verificare.
  4. Elimina la proprietà precedente. Invia un'altra richiesta UpdateSchema senza il vecchio nome proprietà e interrompi l'utilizzo del vecchio nome proprietà nelle richieste di indicizzazione future.

  5. Esegui la migrazione di qualsiasi utilizzo della vecchia proprietà alla nuova. Ad esempio, se modifichi il nome della proprietà da autore ad autore, devi aggiornare il codice della query in modo che utilizzi l'autore dove in precedenza faceva riferimento all'autore.

Cloud Search conserva un record di qualsiasi proprietà o oggetto eliminato per 30 giorni per evitare qualsiasi riutilizzo che potrebbe causare risultati di indicizzazione imprevisti. Entro questi 30 giorni, devi eseguire la migrazione da qualsiasi utilizzo dell'oggetto o della proprietà eliminati, compresi quelli omessi 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.

Informazioni sui limiti di dimensioni

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

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

Passaggi successivi

Di seguito sono riportati alcuni passaggi che potresti 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 utilizzare lo schema _dictionaryEntry per definire sinonimi dei termini comunemente utilizzati nella tua azienda. Per utilizzare lo schema _dictionaryEntry, consulta Definire i sinonimi.

  5. Crea un connettore.