Un connettore di contenuti è un programma software utilizzato per trasferire i dati in un di archiviazione di Google Cloud e compilare un'origine dati. Google fornisce quanto segue opzioni per lo sviluppo di connettori di contenuti:
L'SDK Content Connector. È una buona opzione se stai programmando in Java. L'SDK Content Connector è un wrapper l'API REST, che consente di creare rapidamente connettori. Per creare un contenuto utilizzando l'SDK, consulta Crea un connettore di contenuti utilizzando l'SDK Content Connector.
Un'API REST o librerie API di basso livello. Utilizza queste opzioni in caso contrario programmazione in Java o se il tuo codebase supporta meglio tramite un'API REST o una libreria. Per creare un connettore di contenuti utilizzando l'API REST, consulta a Crea un connettore di contenuti utilizzando l'API REST.
Un tipico connettore di contenuti esegue le seguenti attività:
- Legge ed elabora i parametri di configurazione.
- Estrae blocchi discreti di dati indicizzabili, chiamati "items" dalla terza parte repository di contenuti.
- Combina ACL, metadati e dati sui contenuti in elementi indicizzabili.
- Indicizza gli elementi nell'origine dati di Cloud Search.
- (Facoltativo) Ascolta le notifiche di modifica dei contenuti di terze parti repository Git. Le notifiche di modifica vengono convertite in richieste di indicizzazione per mantenere sincronizzare l'origine dati di Cloud Search con il repository di terze parti. La Il connettore esegue questa attività solo se il repository supporta il rilevamento delle modifiche.
Creare un connettore di contenuti utilizzando l'SDK Content Connector
Le sezioni seguenti spiegano come creare un connettore di contenuti utilizzando il l'SDK Content Connector.
Configura le dipendenze
Per utilizzare l'SDK, devi includere determinate dipendenze nel file di build. Clic in una scheda riportata di seguito per visualizzare le dipendenze per il tuo ambiente di build:
Maven
<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-indexing-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>
Gradle
compile group: 'com.google.enterprise.cloudsearch',
name: 'google-cloudsearch-indexing-connector-sdk',
version: 'v1-0.0.3'
Crea la configurazione del connettore
Ogni connettore dispone di un file di configurazione contenente i parametri utilizzati dal
come l'ID del repository. I parametri sono definiti
coppie chiave-valore, come
api.sourceId=1234567890abcdef
.
L'SDK di Google Cloud Search contiene diverse configurazioni fornite da Google utilizzati da tutti i connettori. Devi dichiarare quanto segue Parametri forniti da Google nel tuo file di configurazione:
- Per un connettore di contenuti, devi dichiarare
api.sourceId
eapi.serviceAccountPrivateKeyFile
mentre questi parametri identificano la località del repository e della chiave privata necessari per accedere al repository.
- Per un connettore di identità, devi dichiarare
api.identitySourceId
come questo identifica la posizione dell'origine identità esterna. Se utenti sincronizzati, devi anche dichiarareapi.customerId
come ID univoco per l'account Google Workspace della tua azienda.
A meno che tu non voglia eseguire l'override dei valori predefiniti non occorre dichiararli nel file di configurazione. Per ulteriori informazioni sui parametri di configurazione forniti da Google, come come generare determinati ID e chiavi, consulta Parametri di configurazione forniti da Google.
Puoi anche definire parametri personalizzati per il repository da utilizzare nelle di configurazione del deployment.
Passa il file di configurazione al connettore
Imposta la proprietà di sistema config
per trasferire il file di configurazione al tuo
di rete. Puoi impostare la proprietà utilizzando l'argomento -D
quando inizi
il connettore. Ad esempio, il seguente comando avvia il connettore
con il file di configurazione MyConfig.properties
:
java -classpath myconnector.jar;... -Dconfig=MyConfig.properties MyConnector
Se questo argomento non è presente, l'SDK tenta di accedere a una configurazione predefinita
file denominato connector-config.properties
.
Stabilire la strategia di attraversamento
La funzione principale di un connettore di contenuti è attraversare un repository indicizzarne i dati. Devi implementare una strategia di attraversamento basata sulle dimensioni e dei dati nel repository. Puoi elaborare la tua strategia oppure dalle seguenti strategie implementate nell'SDK:
- Strategia di attraversamento completo
Una strategia di attraversamento completo analizza l'intero repository e indicizza in modo cieco ogni elemento. Questa strategia è di uso comune quando si dispone di un repository di piccole dimensioni può permettersi l'overhead per eseguire un attraversamento completo ogni volta che esegui l'indicizzazione.
Questa strategia di attraversamento è adatta a repository di piccole dimensioni con statici e non gerarchici. Puoi anche utilizzare questa strategia di attraversamento quando il rilevamento delle modifiche è difficile o non è supportato dal repository.
- Strategia di attraversamento elenco
Una strategia di trasferimento elenco esegue la scansione dell'intero repository, inclusi tutti i file figlio nodi, determinando lo stato di ciascun elemento. Quindi, il connettore impiega un secondo passare e indicizza solo gli elementi nuovi o aggiornati dall'ultima dell'indicizzazione. Questa strategia viene comunemente utilizzata per eseguire aggiorna un indice esistente (anziché eseguire un attraversamento completo ogni volta che aggiorni l'indice).
Questa strategia di attraversamento è adatta quando il rilevamento delle modifiche è difficile o non supportati dal repository, hai dati non gerarchici lavorando con set di dati molto grandi.
- Attraversamento grafico
Una strategia di attraversamento del grafico analizza l'intero nodo padre determinando lo stato di ogni articolo. Quindi, il connettore accetta una seconda passata e indicizza solo elementi nel nodo principale sono nuovi o sono stati aggiornati dopo l'ultima indicizzazione. Infine, il connettore passa tutti gli ID figlio e indicizza gli elementi nei nodi figlio. nuovi o aggiornati. Il connettore prosegue in modo ricorsivo per tutti i nodi figlio fino a gestire tutti gli elementi. Tale attraversamento è in genere utilizzato per repository gerarchici in cui l'elenco di tutti gli ID non pratici.
Questa strategia è adatta se si dispone di dati gerarchici che devono sottoposti a scansione, ad esempio una serie di directory o pagine web.
di Gemini Advanced.
Ognuna di queste strategie di attraversamento viene implementata da un connettore di modelli nell'SDK. Anche se puoi implementare la tua strategia di attraversamento, questi velocizzano notevolmente lo sviluppo del connettore. A creare un connettore utilizzando un modello, passare alla sezione corrispondente la strategia di attraversamento:
- Crea un connettore di attraversamento completo utilizzando una classe modello
- Crea un connettore di attraversamento elenco utilizzando una classe modello
- Crea un connettore di attraversamento grafico utilizzando una classe modello
Crea un connettore di attraversamento completo utilizzando una classe modello
Questa sezione della documentazione fa riferimento agli snippet di codice Esempio di FullTraversalSample.
Implementa il punto di ingresso del connettore
Il punto di ingresso di un connettore è
main()
. L'attività principale di questo metodo è creare un'istanza
Application
e richiamare la sua
start()
per eseguire il connettore.
Prima di chiamare
application.start()
,
utilizza la
IndexingApplication.Builder
per creare un'istanza
FullTraversalConnector
modello. La
FullTraversalConnector
accetta un
Repository
di cui implementi i metodi. Il seguente snippet di codice mostra come
per implementare il metodo main()
:
In background, l'SDK chiama
initConfig()
dopo le chiamate al metodo main()
del connettore
Application.build
.
La
initConfig()
metodo
esegue le seguenti attività:
- Chiama il
Configuation.isInitialized()
per garantire cheConfiguration
non è stato inizializzato. - Inizializza un oggetto
Configuration
con la coppia chiave-valore fornita da Google in coppia. Ogni coppia chiave-valore è archiviata inConfigValue
all'interno dell'oggettoConfiguration
.
Implementa l'interfaccia di Repository
L'unico scopo dell'oggetto Repository
è eseguire l'attraversamento e
l'indicizzazione degli elementi del repository. Quando si utilizza
un modello, devi sostituire solo alcuni metodi all'interno di Repository
per creare un connettore di contenuti. I metodi da sostituire dipendono
il modello e la strategia di attraversamento che utilizzi. Per
FullTraversalConnector
, sostituisci i seguenti metodi:
La
init()
. Per eseguire qualsiasi configurazione e inizializzazione del repository di dati, sostituisci ilinit()
.La
getAllDocs()
. Per attraversare e indicizzare tutti gli elementi nel repository di dati, sostituisci il metodogetAllDocs()
. Questo metodo viene chiamato una volta per ogni attraversamento pianificato (come definito dalla tua configurazione).(Facoltativo) Il campo
getChanges()
. Se il repository supporta il rilevamento delle modifiche, sostituisci ilgetChanges()
. Questo metodo viene chiamato una volta per ogni incrementale pianificato attraversamento (come definito dalla tua configurazione) per recuperare gli elementi modificati e indicizzarle.(Facoltativo) Il campo
close()
. Se devi eseguire la pulizia del repository, esegui l'override diclose()
. Questo metodo viene chiamato una volta durante l'arresto del connettore.
Ciascuno dei metodi
L'oggetto Repository
restituisce un tipo di
ApiOperation
. Un oggetto ApiOperation
esegue un'azione sotto forma di singolo oggetto oppure
forse più, IndexingService.indexItem()
per eseguire l'indicizzazione effettiva del repository.
Ottieni parametri di configurazione personalizzati
Come parte della gestione della configurazione del connettore, dovrai ottenere
parametri personalizzati
Configuration
. Questa attività viene solitamente eseguita in uno
Repository
del corso
init()
.
La classe Configuration
offre diversi metodi per ottenere diversi tipi di dati
da una configurazione. Ogni metodo restituisce un oggetto ConfigValue
. Poi
utilizza il parametro ConfigValue
dell'oggetto
get()
per recuperare il valore effettivo.
Il seguente snippet, da
FullTraversalSample
,
mostra come recuperare un
singolo valore intero personalizzato da un oggetto Configuration
:
Per ottenere e analizzare un parametro contenente più valori, utilizza uno dei
Parser di tipo Configuration
per analizzare i dati in blocchi discreti.
Lo snippet seguente del connettore tutorial utilizza la classe
getMultiValue
per ottenere un elenco di nomi di repository GitHub:
Eseguire un attraversamento completo
Esegui override
getAllDocs()
eseguire un attraversamento completo e indicizzare il repository. getAllDocs()
accetta un checkpoint. Il checkpoint viene utilizzato per riprendere l'indicizzazione in una
un elemento specifico se il processo deve essere interrotto. Per ogni elemento
repository Git, esegui questi passaggi nel getAllDocs()
metodo:
- Imposta le autorizzazioni.
- Imposta i metadati per l'elemento che stai indicizzando.
- Combina i metadati e l'elemento in un'unica posizione indicizzabile
RepositoryDoc
- Pacchettizza ogni elemento indicizzabile in un iteratore restituito da
getAllDocs()
. Tieni presente chegetAllDocs()
restituisce in realtà unCheckpointCloseableIterable
ovvero un'iterazioneApiOperation
di oggetti, ognuno dei quali rappresenta una richiesta API eseguita suRepositoryDoc
, ad esempio l'indicizzazione.
Se l'insieme di elementi è troppo grande per essere elaborato in una singola chiamata, includi un'intestazione
checkpoint e imposta
hasMore(true)
per indicare che sono disponibili più elementi per l'indicizzazione.
Impostare le autorizzazioni per un elemento
Il repository utilizza un elenco di controllo dell'accesso (ACL) per identificare gli utenti o gruppi che hanno accesso a un elemento. Un ACL è un elenco di ID per gruppi o utenti che possono accedere all'elemento.
Devi duplicare l'ACL utilizzato dal tuo repository per garantire che solo quegli utenti con accesso a un elemento possono visualizzarlo nei risultati di ricerca. La Durante l'indicizzazione di un elemento è necessario includere l'ACL di un elemento, in modo che Google Cloud Search abbia le informazioni necessarie per fornire il livello di accesso corretto dell'elemento.
L'SDK Content Connector fornisce un ricco set di classi e metodi ACL per modellare gli ACL della maggior parte dei repository. Devi analizzare l'ACL per ciascun elemento in del repository e crea un ACL corrispondente per Google Cloud Search indicizzare un elemento. Se l'ACL del repository utilizza concetti come ACL eredità, la modellazione dell'ACL può essere difficoltosa. Per ulteriori informazioni su Google per gli ACL di Cloud Search, consulta ACL di Google Cloud Search.
Nota:l'API Cloud Search Index supporta gli ACL a dominio singolo. Non
e supportare gli ACL tra i domini. Utilizza la
Acl.Builder
per impostare l'accesso a ogni elemento utilizzando un ACL. Il seguente snippet di codice, utilizzato
dal campione di attraversamento completo, consente
tutti gli utenti o "entità"
(getCustomerPrincipal()
)
essere "lettori" di tutti gli elementi
(.setReaders()
)
quando esegue una ricerca.
Devi comprendere gli ACL per modellare correttamente gli ACL per il repository. Per Ad esempio, potresti indicizzare file all'interno di un file system che utilizza una sorta di modello di ereditarietà in cui le cartelle secondarie ereditano le autorizzazioni dalle cartelle principali. La modellazione dell'ereditarietà dell'ACL richiede ulteriori informazioni trattata in ACL di Google Cloud Search
Impostare i metadati per un elemento
I metadati sono archiviati in un oggetto Item
. Per creare un Item
, è necessaria una
almeno un ID stringa, un tipo di elemento, ACL, URL e versione univoci per l'elemento.
Il seguente snippet di codice mostra come creare un Item
utilizzando il
IndexingItemBuilder
per la classe helper.
Crea l'elemento indicizzabile
Dopo aver impostato i metadati per l'elemento, puoi creare l'elemento
utilizzando
RepositoryDoc.Builder
. L'esempio seguente mostra come creare un singolo elemento indicizzabile.
Un RepositoryDoc
è un tipo di ApiOperation
che esegue effettivamente
Richiesta IndexingService.indexItem()
.
Puoi utilizzare anche
setRequestMode()
del metodo
RepositoryDoc.Builder
per identificare la richiesta di indicizzazione come ASYNCHRONOUS
o SYNCHRONOUS
:
ASYNCHRONOUS
- La modalità asincrona si traduce in una latenza di indicizzazione in pubblicazione più lunga e consente un'elevata quota di velocità effettiva per le richieste di indicizzazione. La modalità asincrona è consigliata per l'indicizzazione iniziale (backfill) dell'intero repository.
SYNCHRONOUS
- La modalità sincrona riduce la latenza di indicizzazione in fase di pubblicazione e
supporta una quota di velocità effettiva limitata. La modalità sincrona è
consigliato per l'indicizzazione di aggiornamenti e modifiche al repository. Se
non specificata, la modalità di richiesta è
SYNCHRONOUS
per impostazione predefinita.
Pacchettizza ogni elemento indicizzabile in un iteratore
La getAllDocs()
restituisce un Iterator
, in particolare un
CheckpointCloseableIterable
di
RepositoryDoc
di oggetti strutturati. Puoi utilizzare lo
CheckpointClosableIterableImpl.Builder
per creare e restituire un iteratore. Il seguente snippet di codice mostra come
per creare e restituire un iteratore.
L'SDK esegue ogni chiamata di indicizzazione racchiusa nell'iteratore.
Passaggi successivi
Di seguito sono riportati alcuni passaggi che puoi eseguire:
- (Facoltativo) Se la velocità effettiva di indicizzazione sembra lenta, consulta la sezione Aumentare la frequenza di indicizzazione per
FullTraversalConnector
. - (Facoltativo) Implementa
close()
per rilasciare risorse prima dell'arresto. - (Facoltativo) Crea un connettore di identità utilizzando l'SDK Content Connector.
Crea un connettore di attraversamento elenco utilizzando una classe di modello
La coda di indicizzazione di Cloud Search viene utilizzata per contenere ID e hash facoltativo per ogni elemento del repository. Un connettore di attraversamento elenco esegue il push degli ID elemento alla coda di indicizzazione di Google Cloud Search e li recupera uno alla per l'indicizzazione. Google Cloud Search mantiene le code e Confrontare i contenuti della coda per determinare lo stato di un elemento, ad esempio se un elemento è stato sono state eliminate dal repository. Per ulteriori informazioni sul servizio Coda di indicizzazione, consulta La coda di indicizzazione di Cloud Search.
Questa sezione della documentazione fa riferimento agli snippet di codice ListTraversalSample esempio.
Implementa il punto di ingresso del connettore
Il punto di ingresso di un connettore è
main()
. L'attività principale di questo metodo è creare un'istanza
Application
e richiamare la sua
start()
per eseguire il connettore.
Prima di chiamare
application.start()
,
utilizza la
IndexingApplication.Builder
per creare un'istanza
ListingConnector
modello. L'ListingConnector
accetta un
Repository
di cui implementi i metodi. Il seguente snippet mostra come
crea un'istanza di ListingConnector
e del relativo Repository
associato:
In background, l'SDK chiama
initConfig()
dopo le chiamate al metodo main()
del connettore
Application.build
.
Il metodo initConfig()
:
- Chiama il
Configuation.isInitialized()
per garantire cheConfiguration
non è stato inizializzato. - Inizializza un oggetto
Configuration
con la coppia chiave-valore fornita da Google in coppia. Ogni coppia chiave-valore è archiviata inConfigValue
all'interno dell'oggettoConfiguration
.
Implementa l'interfaccia di Repository
L'unico scopo dell'oggetto Repository
è eseguire l'attraversamento e
l'indicizzazione degli elementi del repository. Quando utilizzi un modello, devi solo eseguire l'override
determinati metodi nell'interfaccia Repository
per creare un connettore di contenuti.
I metodi da sostituire dipendono dal modello e dalla strategia di attraversamento utilizzati. Per
ListingConnector
,
sostituisci i seguenti metodi:
La
init()
. Per eseguire qualsiasi configurazione e inizializzazione del repository di dati, sostituisci ilinit()
.La
getIds()
. Per recuperare gli ID e i valori hash per tutti i record nel repository, sostituisci il metodogetIds()
.La
getDoc()
. Per aggiungere nuovi elementi, aggiornare, modificare o eliminare elementi dall'indice, sostituisci lagetDoc()
.(Facoltativo) Il campo
getChanges()
. Se il repository supporta il rilevamento delle modifiche, sostituisci ilgetChanges()
. Questo metodo viene chiamato una volta per ogni incrementale pianificato attraversamento (come definito dalla tua configurazione) per recuperare gli elementi modificati e indicizzarle.(Facoltativo) Il campo
close()
. Se devi eseguire la pulizia del repository, esegui l'override diclose()
. Questo metodo viene chiamato una volta durante l'arresto del connettore.
Ciascuno dei metodi dell'oggetto Repository
restituisce un qualche tipo di
ApiOperation
. Un oggetto ApiOperation
esegue un'azione sotto forma di singolo oggetto oppure
forse più, IndexingService.indexItem()
per eseguire l'indicizzazione effettiva del repository.
Ottieni parametri di configurazione personalizzati
Come parte della gestione della configurazione del connettore, dovrai ottenere
parametri personalizzati
Configuration
. Questa attività viene solitamente eseguita in uno
Repository
del corso
init()
.
La classe Configuration
offre diversi metodi per ottenere diversi tipi di dati
da una configurazione. Ogni metodo restituisce un oggetto ConfigValue
. Poi
utilizza il parametro ConfigValue
dell'oggetto
get()
per recuperare il valore effettivo.
Il seguente snippet, da
FullTraversalSample
,
mostra come recuperare un
singolo valore intero personalizzato da un oggetto Configuration
:
Per ottenere e analizzare un parametro contenente più valori, utilizza uno dei
Parser di tipo Configuration
per analizzare i dati in blocchi discreti.
Lo snippet seguente del connettore tutorial utilizza la classe
getMultiValue
per ottenere un elenco di nomi di repository GitHub:
Eseguire il trasferimento elenco
Esegui override
getIds()
per recuperare gli ID e i valori hash per tutti i record nel repository.
Il metodo getIds()
accetta un checkpoint. Il checkpoint viene utilizzato per riprendere
l'indicizzazione di un elemento specifico in caso di interruzione del processo.
Quindi, sostituisci
getDoc()
per gestire ogni elemento nella coda di indicizzazione di Cloud Search.
Invia ID elemento e valori hash
Esegui override
getIds()
per recuperare gli ID articolo e i relativi valori hash dei contenuti dalla
repository Git. Le coppie ID e valore hash vengono quindi pacchettizzate in un'operazione push
di Cloud Search alla coda di indicizzazione di Cloud Search. Gli ID radice o principali sono in genere
inviato prima dagli ID figlio finché non è stata completata l'intera gerarchia
elaborati.
Il metodo getIds()
accetta un checkpoint che rappresenta l'ultimo elemento da
indicizzati. Il checkpoint può essere utilizzato per riprendere l'indicizzazione in corrispondenza di un elemento specifico
la procedura verrà interrotta. Per ogni elemento del repository, esegui queste operazioni:
passaggi nel metodo getIds()
:
- Recupera ogni ID elemento e il valore hash associato dal repository.
- Pacchettizza ogni coppia ID e valore hash in una
PushItems
. - Combina ogni
PushItems
in un iteratore restituito dalgetIds()
. Tieni presente chegetIds()
restituisce in realtà unCheckpointCloseableIterable
ovvero un'iterazioneApiOperation
di oggetti, ognuno dei quali rappresenta una richiesta API eseguita suRepositoryDoc
, ad esempio esegui il push degli elementi in coda.
Il seguente snippet di codice mostra come ottenere ogni ID articolo e valore hash e
e inserirli in un
PushItems
Un PushItems
è una richiesta ApiOperation
per eseguire il push di un elemento a Cloud Search
Coda di indicizzazione.
Il seguente snippet di codice mostra come utilizzare il parametro
PushItems.Builder
per pacchettizzare gli ID e i valori hash in un unico push
ApiOperation
.
Gli elementi vengono inviati alla coda di indicizzazione di Cloud Search per ulteriori elaborazioni.
Recupera e gestisci ogni elemento
Esegui override
getDoc()
per gestire ogni elemento nella coda di indicizzazione di Cloud Search.
Un elemento può essere nuovo, modificato, non modificato o non esistere più nell'origine
repository Git. Recupera e indicizza ogni elemento nuovo o modificato. Rimuovi elementi
dell'indice che non esistono più nel repository di origine.
Il metodo getDoc()
accetta un elemento da Google Cloud Search
Coda di indicizzazione. Per ogni elemento in coda, esegui questi passaggi nella
Metodo getDoc()
:
Verificare se l'ID dell'elemento, nella coda di indicizzazione di Cloud Search, esiste nel repository. In caso contrario, elimina l'elemento dall'indice.
Esegui un sondaggio nell'indice per verificare lo stato dell'elemento e, se un elemento non è stato modificato (
ACCEPTED
), non fare qualsiasi cosa.Indice modificato o nuovi elementi:
- Imposta le autorizzazioni.
- Imposta i metadati per l'elemento che stai indicizzando.
- Combina i metadati e l'elemento in un'unica posizione indicizzabile
RepositoryDoc
- Restituisci
RepositoryDoc
.
Nota: il modello ListingConnector
non supporta la restituzione di null
su
il metodo getDoc()
. La restituzione di null
comporta la restituzione di un NullPointerException.
Gestire gli elementi eliminati
Il seguente snippet di codice mostra come determinare se un elemento esiste nella repository e, in caso contrario, eliminarlo.
Tieni presente che documents
è una struttura di dati che rappresenta il repository. Se
documentID
non trovato in documents
, reso
APIOperations.deleteItem(resourceName)
:
per eliminare l'elemento dall'indice.
Gestire gli elementi che non sono stati modificati
Il seguente snippet di codice mostra come eseguire il sondaggio sullo stato degli elementi in Cloud Search di indicizzazione e gestire un elemento che non è stato modificato.
Per determinare se l'articolo non è stato modificato, controllane anche lo stato degli altri metadati che potrebbero indicare una modifica. Nell'esempio, i metadati per determinare se l'elemento è stato modificato.
Impostare le autorizzazioni per un elemento
Il repository utilizza un elenco di controllo dell'accesso (ACL) per identificare gli utenti o gruppi che hanno accesso a un elemento. Un ACL è un elenco di ID per gruppi o utenti che possono accedere all'elemento.
Devi duplicare l'ACL utilizzato dal tuo repository per garantire che solo quegli utenti con accesso a un elemento possono visualizzarlo nei risultati di ricerca. La Durante l'indicizzazione di un elemento è necessario includere l'ACL di un elemento, in modo che Google Cloud Search abbia le informazioni necessarie per fornire il livello di accesso corretto dell'elemento.
L'SDK Content Connector fornisce un ricco set di classi e metodi ACL per modellare gli ACL della maggior parte dei repository. Devi analizzare l'ACL per ciascun elemento in del repository e crea un ACL corrispondente per Google Cloud Search indicizzare un elemento. Se l'ACL del repository utilizza concetti come ACL eredità, la modellazione dell'ACL può essere difficoltosa. Per ulteriori informazioni su Google per gli ACL di Cloud Search, consulta ACL di Google Cloud Search.
Nota:l'API Cloud Search Index supporta gli ACL a dominio singolo. Non
e supportare gli ACL tra i domini. Utilizza la
Acl.Builder
per impostare l'accesso a ogni elemento utilizzando un ACL. Il seguente snippet di codice, utilizzato
dal campione di attraversamento completo, consente
tutti gli utenti o "entità"
(getCustomerPrincipal()
)
essere "lettori" di tutti gli elementi
(.setReaders()
)
quando esegue una ricerca.
Devi comprendere gli ACL per modellare correttamente gli ACL per il repository. Per Ad esempio, potresti indicizzare file all'interno di un file system che utilizza una sorta di modello di ereditarietà in cui le cartelle secondarie ereditano le autorizzazioni dalle cartelle principali. La modellazione dell'ereditarietà dell'ACL richiede ulteriori informazioni trattata in ACL di Google Cloud Search
Impostare i metadati per un elemento
I metadati sono archiviati in un oggetto Item
. Per creare un Item
, è necessaria una
almeno un ID stringa, un tipo di elemento, ACL, URL e versione univoci per l'elemento.
Il seguente snippet di codice mostra come creare un Item
utilizzando il
IndexingItemBuilder
per la classe helper.
Creare un elemento indicizzabile
Dopo aver impostato i metadati per l'elemento, puoi creare l'elemento
utilizzando
RepositoryDoc.Builder
L'esempio seguente mostra come creare un singolo elemento indicizzabile.
Un RepositoryDoc
è un tipo di
ApiOperation
che esegue effettivamente
IndexingService.indexItem()
richiesta.
Puoi utilizzare anche
setRequestMode()
del metodo
RepositoryDoc.Builder
per identificare la richiesta di indicizzazione come ASYNCHRONOUS
o SYNCHRONOUS
:
ASYNCHRONOUS
- La modalità asincrona si traduce in una latenza di indicizzazione in pubblicazione più lunga e consente un'elevata quota di velocità effettiva per le richieste di indicizzazione. La modalità asincrona è consigliata per l'indicizzazione iniziale (backfill) dell'intero repository.
SYNCHRONOUS
- La modalità sincrona riduce la latenza di indicizzazione in fase di pubblicazione e
supporta una quota di velocità effettiva limitata. La modalità sincrona è
consigliato per l'indicizzazione di aggiornamenti e modifiche al repository. Se
non specificata, la modalità di richiesta è
SYNCHRONOUS
per impostazione predefinita. di Gemini Advanced.
Passaggi successivi
Di seguito sono riportati alcuni passaggi che puoi eseguire:
- (Facoltativo) Implementa
close()
per rilasciare risorse prima dell'arresto. - (Facoltativo) Crea un connettore di identità utilizzando l'SDK Content Connector.
Crea un connettore di attraversamento grafico utilizzando una classe modello
La coda di indicizzazione di Cloud Search viene utilizzata per contenere ID e valori hash facoltativi di ogni elemento nel repository. Un connettore di attraversamento grafico invia gli ID elemento a la coda di indicizzazione di Google Cloud Search e li recupera uno alla volta dell'indicizzazione. Google Cloud Search gestisce le code e confronta i contenuti con Determinare lo stato di un elemento, ad esempio se è stato eliminato dalla repository Git. Per saperne di più sulla coda di indicizzazione di Cloud Search, consulta: a La coda di indicizzazione di Google Cloud Search.
Durante l'indice, i contenuti dell'elemento vengono recuperati dal repository di dati e da qualsiasi gli ID elemento secondari vengono inviati alla coda. Il connettore procede in modo ricorsivo elaborazione degli ID principali e secondari fino alla gestione di tutti gli elementi.
Questa sezione della documentazione fa riferimento agli snippet di codice GraphTraversalSample esempio.
Implementa il punto di ingresso del connettore
Il punto di ingresso di un connettore è
main()
. L'attività principale di questo metodo è creare un'istanza
Application
e richiamare la sua
start()
per eseguire il connettore.
Prima di chiamare
application.start()
,
utilizza la
IndexingApplication.Builder
per creare un'istanza del modello ListingConnector
. La
ListingConnector
accetta un
Repository
di cui implementi i metodi.
Il seguente snippet mostra come
crea un'istanza di ListingConnector
e del relativo Repository
associato:
In background, l'SDK chiama
initConfig()
dopo le chiamate al metodo main()
del connettore
Application.build
.
Il metodo initConfig()
:
- Chiama il
Configuation.isInitialized()
per garantire cheConfiguration
non è stato inizializzato. - Inizializza un oggetto
Configuration
con la coppia chiave-valore fornita da Google in coppia. Ogni coppia chiave-valore è archiviata inConfigValue
all'interno dell'oggettoConfiguration
.
Implementa l'interfaccia di Repository
L'unico scopo del
L'oggetto Repository
deve eseguire l'attraversamento e l'indicizzazione del repository
elementi. Quando utilizzi un modello, devi sostituire solo alcuni metodi all'interno delle
Repository
per creare un connettore di contenuti. I metodi che sostituisci
dipendono dal modello e dalla strategia di attraversamento utilizzati. Per
ListingConnector
,
puoi sostituire i seguenti metodi:
La
init()
. Per eseguire qualsiasi configurazione e inizializzazione del repository di dati, sostituisci ilinit()
.La
getIds()
. Per recuperare gli ID e i valori hash per tutti i record nel repository, sostituisci il metodogetIds()
.La
getDoc()
. Per aggiungere nuovi elementi, aggiornare, modificare o eliminare elementi dall'indice, sostituisci lagetDoc()
.(Facoltativo) Il campo
getChanges()
. Se il repository supporta il rilevamento delle modifiche, sostituisci ilgetChanges()
. Questo metodo viene chiamato una volta per ogni incrementale pianificato attraversamento (come definito dalla tua configurazione) per recuperare gli elementi modificati e indicizzarle.(Facoltativo) Il campo
close()
. Se devi eseguire la pulizia del repository, esegui l'override diclose()
. Questo metodo viene chiamato una volta durante l'arresto del connettore.
Ciascuno dei metodi
L'oggetto Repository
restituisce un tipo di oggetto ApiOperation
. ApiOperation
che esegue un'azione sotto forma di una
IndexingService.indexItem()
per eseguire l'indicizzazione effettiva del repository.
Ottieni parametri di configurazione personalizzati
Come parte della gestione della configurazione del connettore, dovrai ottenere
parametri personalizzati
Configuration
. Questa attività viene solitamente eseguita in uno
Repository
del corso
init()
.
La classe Configuration
offre diversi metodi per ottenere diversi tipi di dati
da una configurazione. Ogni metodo restituisce un oggetto ConfigValue
. Poi
utilizza il parametro ConfigValue
dell'oggetto
get()
per recuperare il valore effettivo.
Il seguente snippet, da
FullTraversalSample
,
mostra come recuperare un
singolo valore intero personalizzato da un oggetto Configuration
:
Per ottenere e analizzare un parametro contenente più valori, utilizza uno dei
Parser di tipo Configuration
per analizzare i dati in blocchi discreti.
Lo snippet seguente del connettore tutorial utilizza la classe
getMultiValue
per ottenere un elenco di nomi di repository GitHub:
Eseguire l'attraversamento del grafico
Esegui override
getIds()
per recuperare gli ID e i valori hash per tutti i record nel repository.
Il metodo getIds()
accetta un checkpoint. Il checkpoint viene utilizzato per riprendere
l'indicizzazione di un elemento specifico in caso di interruzione del processo.
Quindi, sostituisci
getDoc()
per gestire ogni elemento nella coda di indicizzazione di Cloud Search.
Invia ID elemento e valori hash
Esegui override
getIds()
per recuperare gli ID articolo e i relativi valori hash dei contenuti dalla
repository Git. Le coppie ID e valore hash vengono quindi pacchettizzate in un'operazione push
di Cloud Search alla coda di indicizzazione di Cloud Search. Gli ID radice o principali sono in genere
inviato prima dagli ID figlio finché non è stata completata l'intera gerarchia
elaborati.
Il metodo getIds()
accetta un checkpoint che rappresenta l'ultimo elemento da
indicizzati. Il checkpoint può essere utilizzato per riprendere l'indicizzazione in corrispondenza di un elemento specifico
la procedura verrà interrotta. Per ogni elemento del repository, esegui queste operazioni:
passaggi nel metodo getIds()
:
- Recupera ogni ID elemento e il valore hash associato dal repository.
- Pacchettizza ogni coppia ID e valore hash in una
PushItems
. - Combina ogni
PushItems
in un iteratore restituito dal MetodogetIds()
. Tieni presente chegetIds()
restituisce in realtà unCheckpointCloseableIterable
ovvero un'iterazioneApiOperation
di oggetti, ognuno dei quali rappresenta una richiesta API eseguita suRepositoryDoc
, ad esempio esegui il push degli elementi in coda.
Il seguente snippet di codice mostra come ottenere ogni ID articolo e valore hash e
e inserirli in un
PushItems
. Un PushItems
è un
Richiesta ApiOperation
per eseguire il push di un elemento alla coda di indicizzazione di Cloud Search.
Il seguente snippet di codice mostra come utilizzare il parametro
PushItems.Builder
per pacchettizzare gli ID e i valori hash in un unico push
ApiOperation
.
Gli elementi vengono inviati alla coda di indicizzazione di Cloud Search per ulteriori elaborazioni.
Recupera e gestisci ogni elemento
Esegui override
getDoc()
per gestire ogni elemento nella coda di indicizzazione di Cloud Search.
Un elemento può essere nuovo, modificato, non modificato o non esistere più nell'origine
repository Git. Recupera e indicizza ogni elemento nuovo o modificato. Rimuovi elementi
dell'indice che non esistono più nel repository di origine.
Il metodo getDoc()
accetta un elemento dall'Indicizzazione di Cloud Search
Coda. Per ogni elemento in coda, esegui questi passaggi nella
Metodo getDoc()
:
Verifica se l'ID dell'elemento, all'interno della coda di indicizzazione di Cloud Search, è presente nella repository Git. In caso contrario, elimina l'elemento dall'indice. Se l'elemento esiste, vai al passaggio successivo.
Indice modificato o nuovi elementi:
- Imposta le autorizzazioni.
- Imposta i metadati per l'elemento che stai indicizzando.
- Combina i metadati e l'elemento in un'unica posizione indicizzabile
RepositoryDoc
- Inserisci gli ID figlio nella coda di indicizzazione di Cloud Search per ulteriori elaborazioni.
- Restituisci
RepositoryDoc
.
Gestire gli elementi eliminati
Il seguente snippet di codice mostra come determinare se un elemento esiste nell'indice e non eliminarlo.
Impostare le autorizzazioni per un elemento
Il repository utilizza un elenco di controllo dell'accesso (ACL) per identificare gli utenti o gruppi che hanno accesso a un elemento. Un ACL è un elenco di ID per gruppi o utenti che possono accedere all'elemento.
Devi duplicare l'ACL utilizzato dal tuo repository per garantire che solo quegli utenti con accesso a un elemento possono visualizzarlo nei risultati di ricerca. La Durante l'indicizzazione di un elemento è necessario includere l'ACL di un elemento, in modo che Google Cloud Search abbia le informazioni necessarie per fornire il livello di accesso corretto dell'elemento.
L'SDK Content Connector fornisce un ricco set di classi e metodi ACL per modellare gli ACL della maggior parte dei repository. Devi analizzare l'ACL per ciascun elemento in del repository e crea un ACL corrispondente per Google Cloud Search indicizzare un elemento. Se l'ACL del repository utilizza concetti come ACL eredità, la modellazione dell'ACL può essere difficoltosa. Per ulteriori informazioni su Google per gli ACL di Cloud Search, consulta ACL di Google Cloud Search.
Nota:l'API Cloud Search Index supporta gli ACL a dominio singolo. Non
e supportare gli ACL tra i domini. Utilizza la
Acl.Builder
per impostare l'accesso a ogni elemento utilizzando un ACL. Il seguente snippet di codice, utilizzato
dal campione di attraversamento completo, consente
tutti gli utenti o "entità"
(getCustomerPrincipal()
)
essere "lettori" di tutti gli elementi
(.setReaders()
)
quando esegue una ricerca.
Devi comprendere gli ACL per modellare correttamente gli ACL per il repository. Per Ad esempio, potresti indicizzare file all'interno di un file system che utilizza una sorta di modello di ereditarietà in cui le cartelle secondarie ereditano le autorizzazioni dalle cartelle principali. La modellazione dell'ereditarietà dell'ACL richiede ulteriori informazioni trattata in ACL di Google Cloud Search
Impostare i metadati per un elemento
I metadati sono archiviati in un oggetto Item
. Per creare un Item
, è necessaria una
almeno un ID stringa, un tipo di elemento, ACL, URL e versione univoci per l'elemento.
Il seguente snippet di codice mostra come creare un Item
utilizzando il
IndexingItemBuilder
per la classe helper.
Crea l'elemento indicizzabile
Dopo aver impostato i metadati per l'elemento, puoi creare l'elemento
utilizzando
RepositoryDoc.Builder
L'esempio seguente mostra come creare un singolo elemento indicizzabile.
Un RepositoryDoc
è un tipo di ApiOperation
che esegue effettivamente
Richiesta IndexingService.indexItem()
.
Puoi utilizzare anche
setRequestMode()
del metodo
RepositoryDoc.Builder
per identificare la richiesta di indicizzazione come ASYNCHRONOUS
o SYNCHRONOUS
:
ASYNCHRONOUS
- La modalità asincrona si traduce in una latenza di indicizzazione in pubblicazione più lunga e consente un'elevata quota di velocità effettiva per le richieste di indicizzazione. La modalità asincrona è consigliata per l'indicizzazione iniziale (backfill) dell'intero repository.
SYNCHRONOUS
- La modalità sincrona riduce la latenza di indicizzazione in fase di pubblicazione e
supporta una quota di velocità effettiva limitata. La modalità sincrona è
consigliato per l'indicizzazione di aggiornamenti e modifiche al repository. Se
non specificata, la modalità di richiesta è
SYNCHRONOUS
per impostazione predefinita.
Inserisci gli ID figlio nella coda di indicizzazione di Cloud Search
Il seguente snippet di codice mostra come includere gli ID secondari, per l'elemento principale attualmente in elaborazione nella coda per l'elaborazione. Questi ID vengono elaborati dopo l'indicizzazione dell'elemento principale.
Passaggi successivi
Di seguito sono riportati alcuni passaggi che puoi eseguire:
- (Facoltativo) Implementa
close()
per rilasciare risorse prima dell'arresto. - (Facoltativo) Crea un connettore di identità usando l'SDK Identity Connector.
crea un connettore di contenuti utilizzando l'API REST
Le sezioni seguenti spiegano come creare un connettore di contenuti utilizzando il l'API REST.
Stabilire la strategia di attraversamento
La funzione principale di un connettore di contenuti è attraversare un repository indicizzarne i dati. Devi implementare una strategia di attraversamento basata sulle dimensioni e dei dati nel repository. Di seguito sono riportati i tre attraversamenti comuni strategie:
- Strategia di attraversamento completo
Una strategia di attraversamento completo analizza l'intero repository e indicizza in modo cieco ogni elemento. Questa strategia è di uso comune quando si dispone di un repository di piccole dimensioni può permettersi l'overhead per eseguire un attraversamento completo ogni volta che esegui l'indicizzazione.
Questa strategia di attraversamento è adatta a repository di piccole dimensioni con statici e non gerarchici. Puoi anche utilizzare questa strategia di attraversamento quando il rilevamento delle modifiche è difficile o non è supportato dal repository.
- Strategia di attraversamento elenco
Una strategia di trasferimento elenco esegue la scansione dell'intero repository, inclusi tutti i file figlio nodi, determinando lo stato di ciascun elemento. Quindi, il connettore impiega un secondo passare e indicizza solo gli elementi nuovi o aggiornati dall'ultima dell'indicizzazione. Questa strategia viene comunemente utilizzata per eseguire aggiorna un indice esistente (anziché eseguire un attraversamento completo ogni volta che aggiorni l'indice).
Questa strategia di attraversamento è adatta quando il rilevamento delle modifiche è difficile o non supportati dal repository, hai dati non gerarchici lavorando con set di dati molto grandi.
- Attraversamento grafico
Una strategia di attraversamento del grafico analizza l'intero nodo padre determinando lo stato di ogni articolo. Quindi, il connettore accetta una seconda passata e indicizza solo elementi nel nodo principale sono nuovi o sono stati aggiornati dopo l'ultima indicizzazione. Infine, il connettore passa tutti gli ID figlio e indicizza gli elementi nei nodi figlio. nuovi o aggiornati. Il connettore prosegue in modo ricorsivo per tutti i nodi figlio fino a gestire tutti gli elementi. Tale attraversamento è in genere utilizzato per repository gerarchici in cui l'elenco di tutti gli ID non pratici.
Questa strategia è adatta se si dispone di dati gerarchici che devono sottoposti a scansione, ad esempio directory di serie o pagine web.
di Gemini Advanced.
Implementazione della strategia di attraversamento e degli elementi di indice
Ogni elemento indicizzabile per Cloud Search viene chiamato elemento in l'API Cloud Search. Un elemento può essere un file, una cartella, una riga in un file CSV o un record di database.
Una volta registrato lo schema, puoi completare l'indice in base a:
(Facoltativo) Con
items.upload
per caricare file di dimensioni superiori a 100 KiB per l'indicizzazione. Per i file più piccoli, incorpora i contenuti come inlineContent utilizzandoitems.index
(Facoltativo) Con
media.upload
di caricare file multimediali da indicizzare.Utilizzo di
items.index
per indicizzare l'elemento. Ad esempio, se lo schema utilizza la definizione dell'oggetto nel filmato , una richiesta di indicizzazione per una singola avrà il seguente aspetto:{ "name": "datasource/<data_source_id>/items/titanic", "acl": { "readers": [ { "gsuitePrincipal": { "gsuiteDomain": true } } ] }, "metadata": { "title": "Titanic", "viewUrl": "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" }
(Facoltativo) Utilizzare items.get chiamate per verificare un elemento che è stato indicizzato.
Per eseguire un attraversamento completo, reindicizza periodicamente l'intero repository Git. Per eseguire un attraversamento elenco o grafico, devi implementare per gestire le modifiche al repository.
Gestire le modifiche al repository
Puoi raccogliere e indicizzare periodicamente ogni elemento da un repository per eseguire l'indicizzazione completa. Sebbene efficace nel garantire che l'indice sia aggiornato, una l'indicizzazione può essere costosa quando si gestiscono repository più grandi o gerarchici.
Anziché utilizzare di tanto in tanto chiamate di indice per indicizzare un intero repository, puoi anche utilizzare la coda di indicizzazione di Google Cloud come meccanismo per tenere traccia delle modifiche e indicizzare solo gli elementi che hanno è cambiato. Puoi utilizzare lo items.push richieste di push di elementi in coda per il polling e l'aggiornamento successivi. Per ulteriori informazioni informazioni sulla coda di indicizzazione di Google Cloud, consulta Coda di indicizzazione di Google Cloud.
Per saperne di più sull'API Google Cloud Search, consulta: API Cloud Search.