Files d'attente d'indexation Google Cloud Search

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Le SDK Connector et l'API REST Cloud Search permettent de créer des files d'attente d'indexation Cloud Search afin d'effectuer les tâches suivantes:

  • Maintenez l'état par document (état, valeurs de hachage, etc.) permettant de synchroniser votre index avec votre dépôt.

  • Conserver une liste d'éléments à indexer comme ayant été détectés lors du processus de balayage.

  • Hiérarchisez les éléments dans des files d'attente en fonction de leur état.

  • Maintenez les informations d'état supplémentaires pour une intégration efficace, telles que les points de contrôle, le jeton de modification, etc.

Une file d'attente est un libellé attribué à un élément indexé, tel que "default" pour la file d'attente par défaut, ou "B" pour la file d'attente B.

État et priorité

La priorité d'un document dans une file d'attente est basée sur son code ItemStatus. Voici les codes ItemStatus possibles par ordre de priorité (ceux qui sont traités en premier):

  • ERROR : l'élément a rencontré une erreur asynchrone lors du processus d'indexation et doit être réindexé.

  • MODIFIED : élément précédemment indexé et modifié depuis dans le dépôt depuis la dernière indexation.

  • NEW_ITEM : élément non indexé.

  • ACCEPTED : document précédemment indexé qui n'a pas été modifié dans le dépôt depuis la dernière indexation.

Lorsque deux éléments d'une file d'attente ont le même état, une priorité plus élevée est attribuée aux éléments qui se trouvent dans la file d'attente depuis un certain temps.

Présentation de l'utilisation des files d'attente d'indexation pour indexer un nouvel élément ou un élément modifié

La figure 1 montre les étapes permettant d'indexer un nouvel élément ou un élément modifié à l'aide d'une file d'attente d'indexation. Ces étapes montrent les appels de l'API REST. Pour les appels équivalents du SDK, consultez la section Opérations de la file d'attente (SDK Connector).

Présentation de l'indexation Google Cloud Search
Figure 1 Procédure d'indexation pour ajouter ou mettre à jour un élément
  1. Le connecteur de contenu utilise items.push pour transmettre des éléments (métadonnées et hachage) dans une file d'attente d'indexation afin d'établir l'état de l'élément (MODIFIED, NEW_ITEM, DELETED). Plus précisément:

    • Lors de la transmission, le connecteur inclut explicitement une action type ou contentHash.
    • Si le connecteur n'inclut pas type, Cloud Search utilise automatiquement contentHash pour déterminer l'état de l'élément.
    • Si l'élément est inconnu, l'état est défini sur NEW_ITEM.
    • Si l'élément existe et que les valeurs de hachage correspondent, l'état est conservé en tant que ACCEPTED.
    • Si l'élément existe et que les hachages diffèrent, l'état devient MODIFIED.

    Pour en savoir plus sur l'établissement de l'état des éléments, consultez l'exemple de code Traverser des dépôts GitHub dans le tutoriel de démarrage de Cloud Search.

    En général, le mode push est associé aux processus de détection de changements et/ou de balayage de contenu dans le connecteur.

  2. Le connecteur de contenu utilise items.poll pour interroger la file d'attente afin de déterminer les éléments à indexer. Cloud Search indique au connecteur les éléments qui ont le plus besoin d'être indexés, triés par code d'état, puis par file d'attente.

  3. Le connecteur récupère ces éléments à partir du dépôt et crée des requêtes API d'index.

  4. Le connecteur utilise items.index pour indexer les éléments. L'élément ne passe à l'état ACCEPTED que lorsque Cloud Search a fini de traiter l'élément.

Un connecteur peut également supprimer un élément s'il n'existe plus dans le dépôt, ou le transférer de nouveau s'il n'a pas été modifié ou s'il existe une erreur de dépôt source. Pour en savoir plus sur la suppression d'éléments, consultez la section suivante.

Présentation de l'utilisation des files d'attente d'indexation pour supprimer un élément

La stratégie de transfert complet utilise un processus à deux files d'attente pour indexer les éléments et détecter les suppressions. La figure 2 illustre la procédure à suivre pour supprimer un élément à l'aide de deux files d'attente d'indexation. Plus précisément, la figure 2 montre la deuxième traversée effectuée à l'aide d'une stratégie de traversée complète. Cette procédure utilise les appels d'API REST. Pour obtenir les appels SDK équivalents, consultez la section Opérations de la file d'attente (SDK Connector).

Présentation de l'indexation Google Cloud Search
Figure 2. Suppression d'éléments
  1. Lors du premier balayage, le connecteur de contenu utilise items.push pour placer des éléments (métadonnées et hachage) dans une file d'attente d'indexation, comme dans la file d'attente A (NEW_ITEM), car il n'existe pas dans la file d'attente. Chaque élément est attribué à l'étiquette "A" pour la file d'attente A. Le contenu est indexé dans Cloud Search.

  2. Le connecteur de contenu utilise items.poll pour interroger la file d'attente A afin de déterminer les éléments à indexer. Cloud Search indique au connecteur les éléments qui ont le plus besoin d'être indexés, triés par code d'état, puis par file d'attente.

  3. Le connecteur récupère ces éléments à partir du dépôt et crée des requêtes API d'index.

  4. Le connecteur utilise items.index pour indexer les éléments. L'élément ne passe à l'état ACCEPTED que lorsque Cloud Search a fini de traiter l'élément.

  5. La méthode deleteQueueItems est appelée dans la file d'attente B. Cependant, aucun élément n'a été placé dans la file d'attente B. Rien ne peut donc être supprimé.

  6. Lors du deuxième balayage complet, le connecteur de contenu utilise items.push pour placer des éléments (métadonnées et hachage) dans la file d'attente B:

    • Lors de la transmission, le connecteur inclut explicitement une action type ou contentHash.
    • Si le connecteur n'inclut pas type, Cloud Search utilise automatiquement contentHash pour déterminer l'état de l'élément.
    • Si l'élément est inconnu, l'état est défini sur NEW_ITEM et le libellé de la file d'attente est remplacé par B.&B.
    • Si l'élément existe et que les valeurs de hachage correspondent, l'état est conservé en tant que ACCEPTED et le libellé de la file d'attente est remplacé par "B".
    • Si l'élément existe et que les hachages diffèrent, l'état devient MODIFIED et le libellé de la file d'attente est remplacé par"B".
  7. Le connecteur de contenu utilise items.poll pour interroger la file d'attente afin de déterminer les éléments à indexer. Cloud Search indique au connecteur les éléments qui ont le plus besoin d'être indexés, triés par code d'état, puis par file d'attente.

  8. Le connecteur récupère ces éléments à partir du dépôt et crée des requêtes API d'index.

  9. Le connecteur utilise items.index pour indexer les éléments. L'élément ne passe à l'état ACCEPTED que lorsque Cloud Search a fini de traiter l'élément.

  10. Enfin, deleteQueueItems est appelé dans la file d'attente A pour supprimer tous les éléments Cloud Search précédemment indexés qui ont toujours une étiquette "A".

  11. Pour les balayages complets ultérieurs, la file d'attente utilisée pour l'indexation et la suppression liée à la suppression sont remplacées.

Opérations de file d'attente (SDK Connector)

Le SDK Content Connector fournit des opérations permettant de transférer des éléments dans une file d'attente et d'en extraire.

Pour empaqueter un élément et le placer dans une file d'attente, utilisez la classe pushItems de l'outil de création.

Vous n'avez rien à faire pour extraire les éléments d'une file d'attente en vue de leur traitement. Au lieu de cela, le SDK extrait automatiquement des éléments de la file d'attente, selon l'ordre de priorité, à l'aide de la méthode getDoc de la classe Repository.

Opérations de file d'attente (API REST)

L'API REST fournit les deux méthodes suivantes pour ajouter des éléments à une file d'attente et les extraire:

  • Pour placer un élément dans une file d'attente, utilisez Items.push.
  • Pour interroger des éléments de la file d'attente, utilisez Items.poll.

Vous pouvez également utiliser Items.index pour placer des éléments dans la file d'attente pendant l'indexation. Les éléments envoyés à la file d'attente lors de l'indexation ne nécessitent pas de certificat type et sont automatiquement associés à l'état ACCEPTED.

Items.push

La méthode Items.push ajoute des ID à la file d'attente. Cette méthode peut être appelée avec une valeur type spécifique qui détermine le résultat de l'opération d'envoi. Pour obtenir la liste des valeurs type, reportez-vous au champ item.type dans la méthode Items.push.

Le transfert d'un nouvel ID entraîne l'ajout d'une nouvelle entrée avec un code NEW_ITEMItemStatus.

La charge utile facultative est toujours stockée, traitée comme une valeur opaque et renvoyée par Items.poll.

Lorsqu'un élément est interrogé, il est réservé, ce qui signifie qu'il ne peut pas être renvoyé par un autre appel à Items.poll. Si vous utilisez Items.push avec type comme NOT_MODIFIED, REPOSITORY_ERROR ou REQUEUE, ne réserve pas les entrées interrogées. Pour plus d'informations sur les entrées réservées et non réservées, consultez la section Items.poll.

Items.push avec hachage

L'API REST Cloud Search permet de spécifier des valeurs de hachage de métadonnées et de contenu dans les requêtes Items.index. Au lieu de spécifier type, les valeurs de hachage de métadonnées et/ou de contenu peuvent être spécifiées dans une requête push. La file d'attente d'indexation Cloud Search compare les valeurs de hachage fournies avec les valeurs stockées disponibles avec l'élément dans la source de données. En cas d'incohérence, cette entrée est marquée comme MODIFIED. Si un élément correspondant n'existe pas dans l'index, l'état est NEW_ITEM.

Items.poll

La méthode Items.poll récupère les entrées les plus prioritaires de la file d'attente. Les valeurs d'état demandées et renvoyées indiquent l'état de la ou des files d'attente prioritaires demandées ou l'état des ID renvoyés.

Par défaut, les entrées de n'importe quelle section de la file d'attente peuvent être renvoyées, en fonction de leur priorité. Chaque entrée renvoyée est réservée et n'est pas renvoyée par d'autres appels à Items.poll tant que l'un des cas suivants n'a pas été atteint:

  • La réservation expire.
  • L'entrée est de nouveau mise en file d'attente par Items.index.
  • Items.push est appelé avec une valeur type de NOT_MODIFIED, REPOSITORY_ERROR ou REQUEUE.