L'SDK Connector e l'API Google Cloud Search consentono la creazione di code di coda di indicizzazione Cloud Search utilizzati per eseguire le seguenti attività:
Mantieni lo stato per documento (stato, valori hash e così via) che può essere utilizzato per mantenere l'indice sincronizzato con il repository.
Gestisci un elenco di elementi da indicizzare come rilevati durante il processo di traversale.
Assegna la priorità agli elementi nelle code in base al loro stato.
Gestisci informazioni aggiuntive sullo stato per un'integrazione efficiente, come checkpoint, token di modifica 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 suo codice ItemStatus
. Di seguito sono riportati i possibili
ItemStatus
codici in ordine di priorità (dall'ultimo gestito al primo gestito):
ERROR
- L'elemento ha riscontrato un errore asincrono durante il processo di indicizzazione e deve essere indicizzato di nuovo.MODIFIED
: elemento precedentemente indicizzato e successivamente modificato nel repository dall'ultima indicizzazione.NEW_ITEM
- Elemento non indicizzato.ACCEPTED
: documento precedentemente indicizzato e che non è cambiato nel repository dall'ultima indicizzazione.
Quando due elementi in una coda hanno lo stesso stato, viene assegnata una priorità più alta agli elementi che si trovano in coda da più tempo.
Panoramica dell'utilizzo delle code di indicizzazione per indicizzare un elemento nuovo o modificato
La Figura 1 mostra i passaggi per indicizzare un elemento nuovo o modificato utilizzando una coda di indicizzazione. Questi passaggi mostrano le chiamate API REST. Per le chiamate SDK equivalenti, consulta Operazioni di coda (SDK Connector).
Il connettore dei contenuti utilizza
items.push
per inviare gli elementi (metadati e hash) a una coda di indicizzazione al fine di stabilire il loro stato (MODIFIED
,NEW_ITEM
,DELETED
). Nello specifico:- Durante l'invio, 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'articolo è sconosciuto, lo stato dell'articolo viene impostato su
NEW_ITEM
. - Se l'elemento esiste e i valori hash corrispondono, lo stato viene mantenuto come
ACCEPTED
. - Se l'elemento esiste e gli hash sono diversi, lo stato diventa
MODIFIED
.
Per ulteriori informazioni su come viene stabilito lo stato dell'elemento, consulta il codice di esempio per la navigazione nei repository GitHub nel tutorial introduttivo di Cloud Search.
In genere, il push è associato alle procedure di rilevamento delle modifiche e di attraversamento dei contenuti nel connettore.
- Durante l'invio, il connettore include esplicitamente un push
Il connettore dei contenuti utilizza
items.poll
per eseguire il polling della coda al fine di determinare gli elementi da indicizzare. Cloud Search indica al connettore quali elementi hanno più bisogno di indicizzazione, ordinati prima per codice di stato e poi per tempo in coda.Il connettore recupera questi elementi dal repository e crea le richieste dell'API di indice.
Il connettore utilizza
items.index
per indicizzare gli elementi. L'elemento entra nello statoACCEPTED
solo al termine dell'elaborazione da parte di Cloud Search.
Un connettore può anche eliminare un elemento se non esiste più nel repository, spingere di nuovo un elemento se non è modificato o se si verifica un errore nel repository di origine. Per informazioni sulle eliminazioni di elementi, consulta la sezione successiva.
Panoramica dell'utilizzo delle code di indicizzazione per eliminare un elemento
La strategia di attraversamento completo utilizza un processo con due code per indicizzare gli elementi e rilevare le eliminazioni. La Figura 2 mostra i passaggi per eliminare un elemento utilizzando due code di indicizzazione. Nello specifico, la figura 2 mostra il secondo attraversamento eseguito utilizzando una strategia di attraversamento completo. Questi passaggi utilizzano le chiamate API REST. Per le chiamate SDK equivalenti, consulta Operazioni di coda (SDK Connector).
Al primo passaggio, il connettore dei contenuti utilizza
items.push
per inviare gli elementi (metadati e hash) in una coda di indicizzazione, "coda A" comeNEW_ITEM
poiché non esiste nella coda. A ogni elemento viene assegnata l'etichetta "A" per la "coda A". I contenuti vengono indicizzati in Cloud Search.Il connettore dei 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 hanno più bisogno di indicizzazione, ordinati prima per codice di stato e poi per tempo in coda.Il connettore recupera questi elementi dal repository e crea le richieste dell'API di indicizzazione.
Il connettore utilizza
items.index
per indicizzare gli elementi. L'elemento entra nello statoACCEPTED
solo al termine dell'elaborazione da parte di Cloud Search.Il metodo
deleteQueueItems
viene chiamato nella "coda B". Tuttavia, nessun elemento è stato inviato alla coda B, pertanto non è possibile eliminare nulla.Al secondo passaggio completo, il connettore dei contenuti utilizza
items.push
per inviare gli elementi (metadati e hash) alla coda B:- Durante l'invio, 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 come
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 viene modificata in "B".
- Durante l'invio, il connettore include esplicitamente un push
Il connettore dei contenuti utilizza
items.poll
per eseguire il polling della coda al fine di determinare gli elementi da indicizzare. Cloud Search indica al connettore quali elementi hanno più bisogno di indicizzazione, ordinati prima per codice di stato e poi per tempo in coda.Il connettore recupera questi elementi dal repository e crea le richieste dell'API di indice.
Il connettore utilizza
items.index
per indicizzare gli elementi. L'elemento entra nello statoACCEPTED
solo al termine dell'elaborazione da parte di 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 coda "A".Con le successive esplorazioni complete, la coda utilizzata per l'indicizzazione e la coda utilizzata per l'eliminazione vengono scambiate.
Operazioni di coda (SDK Connector)
L'SDK Content Connector fornisce operazioni per inviare elementi a una coda e rimuoverli da una coda.
Per pacchettizzare e inviare un elemento a una coda, utilizza la classe del compilatore pushItems
.
Non è necessario fare nulla di specifico per estrarre gli elementi da una coda per la loro elaborazione. L'SDK estrae automaticamente gli elementi dalla coda, in ordine di priorità, utilizzando il metodo getDoc
della classe Repository.
Operazioni di coda (API REST)
L'API REST fornisce i seguenti due metodi per inviare elementi a una coda e recuperarli da una coda:
- Per inviare un elemento a una coda, utilizza
Items.push
. - Per eseguire il polling degli elementi nella coda, utilizza
Items.poll
.
Puoi anche utilizzare
Items.index
per inviare elementi alla coda durante l'indicizzazione. Gli elementi inviati alla coda durante l'indicizzazione non richiedono un valore type
e viene assegnato automaticamente lo stato ACCEPTED
.
Items.push
Il metodo
Items.push
aggiunge gli ID alla coda. Questo metodo può essere chiamato con un valore
type
specifico che determina il risultato dell'operazione push. Per un elenco dei valori type
, consulta il campo item.type
nel metodo Items.push.
L'invio 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 valore opaco e restituito da Items.poll
.
Quando un elemento viene sottoposto a polling, viene riservato, il che significa che non può essere restituito da un'altra chiamata a Items.poll
.
L'utilizzo di Items.push
con type
come NOT_MODIFIED
, REPOSITORY_ERROR
o REQUEUE
annulla la prenotazione delle voci sottoposte a sondaggio. Per ulteriori informazioni sulle voci riservate e non riservate, consulta la sezione Items.poll.
Items.push
con hash
L'API Google Cloud Search supporta la specifica di valori hash dei metadati e dei contenuti
nelle
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 memorizzati disponibili per 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 dalla coda le voci con la priorità più alta. I valori di stato richiesti e restituiti indicano gli stati delle code di priorità richieste o lo stato degli ID restituiti.
Per impostazione predefinita, è possibile restituire 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 viene inserita di nuovo in coda da
Items.index
. Items.push
viene chiamato con un valore ditype
pari aNOT_MODIFIED
,REPOSITORY_ERROR
oREQUEUE
.