O SDK do Connector e a API Cloud Search oferecem suporte à criação de filas de indexação do Cloud Search. Use essas filas para:
- Manter o estado por documento (status, hashes etc.) para manter o índice sincronizado.
- Manter uma lista de itens a serem indexados, conforme detectados durante a travessia.
- Priorizar itens com base no status deles.
- Manter informações de estado, como checkpoints e tokens de alteração.
Uma fila é um rótulo atribuído a um item indexado (por exemplo, "padrão").
Status e prioridade
A prioridade de um documento depende do
ItemStatus
código dele. Os códigos possíveis, em ordem de prioridade (maior para menor), são:
ERROR: o item encontrou um erro assíncrono e precisa ser reindexado.MODIFIED: o item foi indexado anteriormente, mas mudou no repositório.NEW_ITEM: o item ainda não foi indexado.ACCEPTED: o item foi indexado anteriormente e não mudou.
Para itens com o mesmo status, a maior prioridade é para aqueles que estão na fila há mais tempo.
Indexar um item novo ou alterado
A Figura 1 mostra as etapas para indexar um item novo ou alterado usando uma fila de indexação. Essas etapas refletem chamadas da API REST. Para equivalentes do SDK, consulte Operações de fila (SDK do Connector).
- O conector de conteúdo usa
items.pushpara enviar metadados e hashes para uma fila.- Se o conector incluir um push
typeoucontentHash, o Cloud Search vai determinar o status. - Itens desconhecidos recebem o status
NEW_ITEM. - Os itens atuais com hashes correspondentes permanecem
ACCEPTED. - Os itens atuais com hashes diferentes se tornam
MODIFIED.
- Se o conector incluir um push
- O conector usa
items.pollpara determinar quais itens indexar. O Cloud Search retorna itens em ordem de prioridade. - O conector recupera itens do repositório e cria solicitações de API de índice.
- O conector usa
items.indexpara indexar os itens. Um item entra no estadoACCEPTEDapós o processamento bem-sucedido.
Excluir um item
A estratégia de travessia completa usa duas filas para indexar itens e detectar exclusões. A Figura 2 mostra a segunda travessia nessa estratégia.
- Na travessia inicial, o conector envia itens para a "fila A" como
NEW_ITEM. Cada item recebe o rótulo "A". - O conector pesquisa a fila A e indexa os itens.
- Na segunda travessia completa, o conector envia itens para a "fila B".
- Itens desconhecidos recebem o rótulo "B" e o status
NEW_ITEM. - Os itens atuais com hashes correspondentes mudam o rótulo para "B" e permanecem
ACCEPTED. - Os itens atuais com hashes diferentes mudam o rótulo para "B" e se tornam
MODIFIED.
- Itens desconhecidos recebem o rótulo "B" e o status
- O conector pesquisa a fila B e indexa os itens.
- Por fim, o conector chama
deleteQueueItemsna fila A. Isso exclui todos os itens indexados anteriormente que ainda têm o rótulo "A". - As travessias subsequentes trocam os papéis das duas filas.
Operações de fila (SDK do Connector)
Use o
pushItems
builder para enviar itens. O SDK extrai automaticamente itens da fila em
ordem de prioridade usando o Repository class's
getDoc
método.
Operações de fila (API REST)
- Para enviar: use
Items.push. - Para pesquisar: use
Items.poll.
Você também pode usar
Items.index
para enviar itens durante a indexação. Esses itens recebem o status ACCEPTED automaticamente.
Items.push
Esse método adiciona IDs à fila. O
type
determina o resultado. O envio de um novo ID adiciona uma entrada com o status NEW_ITEM.
O payload opcional é retornado durante a pesquisa.
Os itens pesquisados são reservados e não podem ser retornados por outras chamadas de pesquisa. O uso de Items.push com type definido como NOT_MODIFIED, REPOSITORY_ERROR ou REQUEUE cancela a reserva das entradas.
Items.push com hashes
Especifique metadados ou hashes de conteúdo na solicitação de envio.
O Cloud Search compara esses valores aos armazenados. Se eles não corresponderem, a entrada se tornará MODIFIED. IDs incompatíveis que não existem se tornam NEW_ITEM.
Items.poll
Esse método recupera entradas de alta prioridade. Cada entrada retornada é reservada até que expire, seja reindexada ou tenha a reserva cancelada usando Items.push.