L'SDK Connector e l'API Google Cloud Search consentono la creazione delle code di indicizzazione di Cloud Search utilizzate per eseguire le seguenti attività:
Mantieni lo stato dei singoli documenti (stato, valori hash e così via) che puoi utilizzare per sincronizzare l'indice con il repository.
Mantieni un elenco di elementi da indicizzare come rilevati durante il processo di attraversamento.
Assegna una priorità agli elementi in coda in base allo stato degli articoli.
Mantieni informazioni sullo stato aggiuntive per un'integrazione efficiente, come punti di controllo, modifica del token e così via.
Una coda è un'etichetta assegnata a un elemento indicizzato, ad esempio "predefinita" per la coda predefinita o "B" per la coda B.
Stato e priorità
La priorità di un documento in una coda si basa sul relativo codice ItemStatus
. Di seguito sono riportati i possibili codici ItemStatus
in ordine di priorità (gestiti dal primo all'ultimo):
ERROR
- L'elemento ha riscontrato un errore asincrono durante il processo di indicizzazione e deve essere reindicizzato.MODIFIED
: elemento che è stato indicizzato in precedenza e che, successivamente, è stato modificato nel repository dopo l'ultima indicizzazione.NEW_ITEM
: elemento non indicizzato.ACCEPTED
- Documento che è stato indicizzato in precedenza e che non è cambiato nel repository dall'ultima indicizzazione.
Quando due elementi in una coda hanno lo stesso stato, viene data una priorità più elevata a quelli che sono rimasti in coda per il periodo di tempo più lungo.
Panoramica dell'utilizzo delle code di indicizzazione per indicizzare un elemento nuovo o modificato
La Figura 1 mostra i passaggi per l'indicizzazione di un elemento nuovo o modificato utilizzando una coda di indicizzazione. Questi passaggi mostrano le chiamate API REST. Per chiamate SDK equivalenti, consulta Operazioni sulle code (SDK del connettore).
Il connettore di contenuti utilizza
items.push
per eseguire il push di elementi (metadati e hash) in una coda di indicizzazione al fine di stabilire lo stato dell'elemento (MODIFIED
,NEW_ITEM
,DELETED
). Nello specifico:- Quando esegui il push, il connettore include esplicitamente un push
type
ocontentHash
. - Se il connettore non include
type
, Cloud Search utilizza automaticamentecontentHash
per determinare lo stato dell'elemento. - Se l'elemento è sconosciuto, lo stato dell'articolo è impostato su
NEW_ITEM
. - Se l'articolo esiste e i valori hash corrispondono, lo stato viene mantenuto su
ACCEPTED
. - Se l'elemento esiste e gli hash sono diversi, lo stato diventa
MODIFIED
.
Per maggiori informazioni su come viene stabilito lo stato degli elementi, consulta il codice campione sull'esplorazione dei repository GitHub nel tutorial introduttivo di Cloud Search.
Di solito, il push è associato ai processi di attraversamento dei contenuti e/o di rilevamento delle modifiche nel connettore.
- Quando esegui il push, il connettore include esplicitamente un push
Il connettore di contenuti utilizza
items.poll
per eseguire il polling della coda e determinare gli elementi da indicizzare. Cloud Search indica al connettore quali elementi sono più necessari per l'indicizzazione, ordinati prima per codice di stato e poi per tempo di coda.Il connettore recupera questi elementi dal repository e crea richieste API di indice.
Il connettore utilizza
items.index
per indicizzare gli elementi. L'elemento entra nello statoACCEPTED
solo al termine dell'elaborazione dell'elemento in Cloud Search.
Un connettore può anche eliminare un elemento se non esiste più nel repository o eseguire di nuovo il push di un elemento se non viene modificato o se si verifica un errore del repository di codice sorgente. Per informazioni sull'eliminazione degli articoli, consulta la sezione successiva.
Panoramica dell'utilizzo delle code di indicizzazione per eliminare un elemento
La strategia full-traversal utilizza un processo a due code per indicizzare gli elementi e rilevare le eliminazioni. La Figura 2 mostra i passaggi per l'eliminazione di un elemento utilizzando due code di indicizzazione. Nello specifico, la figura 2 mostra il secondo attraversamento eseguito utilizzando una strategia di attraversamento completo. In questi passaggi vengono usate le chiamate API REST. Per chiamate SDK equivalenti, consulta Operazioni in coda (SDK Connector).
Durante l'attraversamento iniziale, il connettore di contenuti utilizza
items.push
per eseguire il push degli elementi (metadati e hash) in una coda di indicizzazione, la"coda A" comeNEW_ITEM
, in quanto non esiste nella coda. A ogni elemento viene assegnata l'etichetta "A" per "coda A". I contenuti sono indicizzati in Cloud Search.Il connettore di contenuti utilizza
items.poll
per eseguire il polling della coda A al fine di determinare gli elementi da indicizzare. Cloud Search indica al connettore quali elementi sono più necessari per l'indicizzazione, ordinati prima per codice di stato e poi per tempo di coda.Il connettore recupera questi elementi dal repository e crea richieste API di indice.
Il connettore utilizza
items.index
per indicizzare gli elementi. L'elemento entra nello statoACCEPTED
solo al termine dell'elaborazione dell'elemento in Cloud Search.Il metodo
deleteQueueItems
è chiamato sulla "coda B". Tuttavia, nessun elemento è stato inviato alla coda B, quindi non è possibile eliminare nulla.Nel secondo attraversamento completo, il connettore di contenuti utilizza
items.push
per inviare gli elementi (metadati e hash) alla coda B:- Quando esegui il push, il connettore include esplicitamente un push
type
ocontentHash
. - Se il connettore non include
type
, Cloud Search utilizza automaticamentecontentHash
per determinare lo stato dell'elemento. - Se l'elemento è sconosciuto, lo stato dell'elemento viene impostato su
NEW_ITEM
e l'etichetta della coda viene modificata in "B". - Se l'elemento esiste e i valori hash corrispondono, lo stato viene mantenuto
ACCEPTED
e l'etichetta della coda viene modificata in "B". - Se l'elemento esiste e gli hash sono diversi, lo stato diventa
MODIFIED
e l'etichetta della coda diventa "B".
- Quando esegui il push, il connettore include esplicitamente un push
Il connettore di contenuti utilizza
items.poll
per eseguire il polling della coda e determinare gli elementi da indicizzare. Cloud Search indica al connettore quali elementi sono più necessari per l'indicizzazione, ordinati prima per codice di stato e poi per tempo di coda.Il connettore recupera questi elementi dal repository e crea richieste API di indice.
Il connettore utilizza
items.index
per indicizzare gli elementi. L'elemento entra nello statoACCEPTED
solo al termine dell'elaborazione dell'elemento in Cloud Search.Infine,
deleteQueueItems
viene chiamato nella coda A per eliminare tutti gli elementi di CCloud Search indicizzati in precedenza che hanno ancora un'etichetta "A" della coda.Con gli attraversamenti completi successivi, la coda utilizzata per l'indicizzazione e quella utilizzata per l'eliminazione vengono scambiate.
Operazioni in coda (SDK Connector)
L'SDK Content Connector fornisce le operazioni per eseguire il push di elementi e il pull di elementi da una coda.
Per pacchettizzare un elemento e eseguirne il push in una coda, utilizza la classe del builder pushItems
.
Non è necessario fare nulla di specifico per eseguire il pull degli elementi da una coda per l'elaborazione. L'SDK estrae automaticamente gli elementi dalla coda, in ordine di priorità, utilizzando il metodo getDoc
della classe Repository.
Operazioni sulla coda (API REST)
L'API REST fornisce i due metodi seguenti per eseguire il push degli elementi e il pull degli elementi da una coda:
- Per eseguire il push di un elemento in una coda, utilizza
Items.push
. - Per eseguire un sondaggio tra gli elementi in coda, utilizza
Items.poll
.
Puoi anche utilizzare Items.index
per eseguire il push degli elementi alla coda durante l'indicizzazione. Gli elementi inviati alla coda durante
l'indicizzazione non richiedono un
type
e viene assegnato automaticamente lo stato
ACCEPTED
.
Items.push
Il metodo Items.push
aggiunge ID alla coda. Questo metodo può essere chiamato con un valore type
specifico che determina il risultato dell'operazione di push. Per un elenco dei valori type
, fai riferimento al campo item.type
nel metodo Items.push.
Il push di un nuovo ID comporta l'aggiunta di una nuova voce con un codice NEW_ITEM
ItemStatus
.
Il payload facoltativo viene sempre archiviato, trattato come un valore opaco e restituito da Items.poll
.
Quando un elemento viene sottoposto a polling, è prenotato, ovvero non può essere restituito da
un'altra chiamata a
Items.poll
.
Se utilizzi
Items.push
con
type
come NOT_MODIFIED
, REPOSITORY_ERROR
o REQUEUE
, annulla la prenotazione
le voci sottoposte a sondaggio. Per saperne di più sulle voci prenotate e non prenotate, consulta la sezione Items.poll.
Items.push
con hash
L'API Google Cloud Search supporta la specifica di metadati e valori hash dei contenuti per le richieste Items.index
. Anziché specificare type
, i valori hash dei metadati e/o dei contenuti possono essere specificati con una richiesta push. La coda di indicizzazione di Cloud Search confronta
i valori hash forniti con i valori archiviati disponibili con l'elemento
nell'origine dati. In caso di mancata corrispondenza, la voce viene contrassegnata come MODIFIED
. Se nell'indice non esiste un elemento corrispondente, lo stato è NEW_ITEM
.
Items.poll
Il metodo Items.poll recupera le voci con la priorità più alta dalla coda. I valori di stato richiesti e restituiti indicano lo stato o gli stati delle code di priorità richieste o lo stato degli ID restituiti.
Per impostazione predefinita, possono essere restituite le voci di qualsiasi sezione della coda in base alla priorità. Ogni voce restituita è riservata e non viene restituita da altre chiamate a Items.poll
finché non si verifica uno dei seguenti casi:
- La prenotazione scade.
- La voce è stata nuovamente accodata da
Items.index
. Items.push
viene chiamato con un valoretype
pari aNOT_MODIFIED
,REPOSITORY_ERROR
oREQUEUE
.