Le code di indicizzazione di Google Cloud Search

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).

Panoramica dell'indicizzazione di Google Cloud Search
Figura 1. Procedura di indicizzazione per aggiungere o aggiornare un elemento
  1. 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 o contentHash.
    • Se il connettore non include type, Cloud Search utilizza automaticamente contentHash 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.

  2. 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.

  3. Il connettore recupera questi elementi dal repository e crea le richieste dell'API di indice.

  4. Il connettore utilizza items.index per indicizzare gli elementi. L'elemento entra nello stato ACCEPTED 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).

Panoramica dell'indicizzazione di Google Cloud Search
Figura 2. Eliminazione di elementi
  1. Al primo passaggio, il connettore dei contenuti utilizza items.push per inviare gli elementi (metadati e hash) in una coda di indicizzazione, "coda A" come NEW_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.

  2. 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.

  3. Il connettore recupera questi elementi dal repository e crea le richieste dell'API di indicizzazione.

  4. Il connettore utilizza items.index per indicizzare gli elementi. L'elemento entra nello stato ACCEPTED solo al termine dell'elaborazione da parte di Cloud Search.

  5. Il metodo deleteQueueItems viene chiamato nella "coda B". Tuttavia, nessun elemento è stato inviato alla coda B, pertanto non è possibile eliminare nulla.

  6. 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 o contentHash.
    • Se il connettore non include type, Cloud Search utilizza automaticamente contentHash 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".
  7. 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.

  8. Il connettore recupera questi elementi dal repository e crea le richieste dell'API di indice.

  9. Il connettore utilizza items.index per indicizzare gli elementi. L'elemento entra nello stato ACCEPTED solo al termine dell'elaborazione da parte di Cloud Search.

  10. 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".

  11. 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 di type pari a NOT_MODIFIED, REPOSITORY_ERROR o REQUEUE.