Site icon Blog ARC Optimizer

Indexation du Hub de contenu dans Coveo / Blogs / Perficient

Indexation du Hub de contenu dans Coveo / Blogs / Perficient


Introduction 📖

Dans le nouveau monde composable, il est courant que les solutions Sitecore de taille moyenne Ă  grande incluent un systĂšme de recherche tel que CovĂ©o et un outil de gestion des actifs numĂ©riques comme Centre de contenu Sitecore. Un cas d’utilisation typique consiste Ă  crĂ©er des sources de recherche dans Coveo qui indexent le contenu rĂ©sidant dans Content Hub. Ces index, Ă  leur tour, peuvent ensuite ĂȘtre utilisĂ©s pour crĂ©er des expĂ©riences de recherche frontales. Dans cet article de blog, j’aimerais donner quelques conseils pour travailler avec l’API REST Content Hub afin de remplir les sources de recherche dans Coveo. Ces conseils sont basĂ©s sur mes expĂ©riences sur un projet rĂ©cent qui utilisait l’API REST Content Hub pour indexer des documents PDF dans Coveo.

#1 – Savoir quelle API utiliser đŸ€”

N’ayant jamais utilisĂ© l’API REST Content Hub auparavant, je ne savais pas au dĂ©part qu’il existe plusieurs points de terminaison. Voici un bref aperçu de quelques-uns d’entre eux :

API de requĂȘte (GET http://<hostname>/api/entities/query/)

La fonctionnalitĂ© de requĂȘte vous permet d’interroger des entitĂ©s spĂ©cifiques Ă  l’aide de champs de mĂ©tadonnĂ©es indexĂ©es spĂ©cifiques. Cette requĂȘte de base contraste avec la fonctionnalitĂ© de recherche plus Ă©laborĂ©e offerte par l’API M.Content.

API de défilement (GET http://<hostname>/api/entities/scroll/)

Vous pouvez utiliser l’API Scroll pour rĂ©cupĂ©rer un grand nombre de rĂ©sultats (ou mĂȘme tous les rĂ©sultats) Ă  partir d’une seule requĂȘte.

Il ne prend pas en charge le paramĂštre skip et vous permet uniquement de demander la page suivante via la ressource. Vous pouvez continuer la pagination jusqu’à ce qu’elle ne renvoie plus de rĂ©sultats ou que vous ayez atteint la derniĂšre page.

API RechercheAprĂšs (POST http://<HOSTNAME>/api/entities/searchafter/)

L’API SearchAfter est utilisĂ©e pour rĂ©cupĂ©rer plusieurs pages de rĂ©sultats de recherche de maniĂšre sĂ©quentielle. Pour commencer, une requĂȘte est effectuĂ©e pour la premiĂšre page de rĂ©sultats, qui inclut une valeur last_hit_data correspondant au dernier Ă©lĂ©ment de la page. Cette valeur est ensuite utilisĂ©e pour rĂ©cupĂ©rer les pages suivantes jusqu’à ce que tous les rĂ©sultats soient rĂ©cupĂ©rĂ©s.

Sur ce projet particulier, l’API Query a Ă©tĂ© utilisĂ©e pour extraire des PDF. De par sa conception, l’API Query renvoie un maximum de 10 000 rĂ©sultats. Dans ce cas, tout allait bien : il y avait environ 9 000 ressources dans Content Hub Ă  l’époque (sans aucun filtrage supplĂ©mentaire appliquĂ©). Cependant, afin de pĂ©renniser un peu la requĂȘte et d’éviter un traitement inutile de documents non PDF, il Ă©tait logique de rendre la requĂȘte plus spĂ©cifique (voir #2, ci-dessous 👇).

Sortie nette : Si vous savez que vous devrez extraire plus de 10 000 Ă©lĂ©ments de Content Hub et les paginer efficacement, utilisez l’API SearchAfter. Si votre nombre d’actifs est infĂ©rieur Ă  10 000, l’API Query convient probablement. Notez que l’API SearchAfter sera bientĂŽt obsolĂšte et remplacera l’API Scroll, il est donc prĂ©fĂ©rable d’éviter l’API Scroll pour tout nouveau travail.

#2 – Filtrage sur le type de mĂ©dia et le statut d’approbation 🔼

J’aime penser que je peux comprendre la plupart des choses si je lis la documentation. Cependant, lorsqu’il s’agissait de mettre Ă  jour la requĂȘte pour filtrer les fichiers PDF approuvĂ©s pour l’indexation, je ne savais pas du tout comment procĂ©der. Comme mentionnĂ© ci-dessus, l’API Query est limitĂ©e Ă  10 000 rĂ©sultats et nous en Ă©tions assez proches en termes de nombre total d’actifs. Il Ă©tait important d’ĂȘtre plus sĂ©lectif lors du retrait d’actifs tels que seulement les PDF approuvĂ©s ont Ă©tĂ© renvoyĂ©s.

AprĂšs avoir expĂ©rimentĂ© sans succĂšs pendant un certain temps, je suis tombĂ© en panne et j’ai ouvert un ticket d’assistance Sitecore pour demander comment cela pouvait ĂȘtre accompli. J’ai eu une rĂ©ponse
 et ça a fonctionnĂ©, mais ce n’était pas aussi Ă©vident que je l’aurais souhaitĂ©. Qui aime les chiffres magiques ? đŸ§™â€â™‚ïžâœš

Pour rechercher des ressources PDF : ... AND Parent('AssetMediaToAsset').id==1057.

Pour garantir que seuls les actifs approuvés sont inclus : ... AND Parent('FinalLifeCycleStatusToAsset')==544.

En l’assemblant, l’URL complĂšte de la requĂȘte (sans tout ordre appliqué ; voir #3 ci-dessous 👇) Ă©tait :

{baseURL}/api/entities/query?query=Definition.Name=='M.Asset' AND Parent('AssetMediaToAsset').id==1057 AND Parent('FinalLifeCycleStatusToAsset').id==544

Autrement dit:

Donnez-moi tous les Ă©lĂ©ments dont le type de fichier est PDF et dont le statut d’approbation est approuvĂ©.

Maintenant je pense ces identifiants sont communs Ă  toutes les instances de Content Hub mais, juste au cas oĂč, assurez-vous qu’ils correspondent aux valeurs appropriĂ©es dans ton Instance Content Hub avant d’utiliser les mĂȘmes ID dans vos requĂȘtes. Vous pouvez trouver les ID de type de mĂ©dia d’élĂ©ment sous Gestion des taxonomies dans Content Hub :

Types de mĂ©dias d’actifs dans l’interface de gestion des taxonomies de Content Hub.

#3 – Trier đŸ”Œ

Lorsque vous crĂ©ez une source API REST dans Coveo avec l’intention de parcourir des centaines ou des milliers d’actifs dans Content Hub, il est prĂ©fĂ©rable de les renvoyer dans un ordre cohĂ©rent. À un moment donnĂ© lors du dĂ©pannage de certains problĂšmes d’indexation, le support Coveo a suggĂ©rĂ© que l’API Content Hub renvoyait les rĂ©sultats dans un ordre incohĂ©rent et que cela Ă©tait potentiellement un facteur contributif. MĂȘme si cela n’a jamais Ă©tĂ© dĂ©montrĂ© de maniĂšre concluante, il fait Il est logique d’appliquer un tri, ne serait-ce que pour garantir que les actifs sont traitĂ©s dans un ordre spĂ©cifique et prĂ©visible.

La requĂȘte a Ă©tĂ© mise Ă  jour pour trier createdOn ascendant (le plus ancien en premier); l’URL de requĂȘte mise Ă  jour ressemblait Ă  ceci :

{baseURL}/api/entities/query?query=Definition.Name=='M.Asset' AND Parent('AssetMediaToAsset').id==1057 AND Parent('FinalLifeCycleStatusToAsset').id==544&sort=createdOn&order=Asc

Chose intĂ©ressante, j’ai trouvĂ© que created_on a Ă©galement fonctionnĂ©, mais, selon le support de Sitecore, createdOn devrait ĂȘtre utilisĂ© Ă  la place.

#4 – Pagination 📃

Les sources de l’API REST dans Coveo seront presque toujours configurĂ©es pour paginer les rĂ©sultats provenant de l’API externe, sinon seule la valeur des donnĂ©es de la premiĂšre page sera traitĂ©e et indexĂ©e. Il est important de s’assurer que la pagination est correctement configurĂ©e pour permettre Ă©galement des dĂ©lais raisonnables de reconstruction et de nouvelle analyse de l’index. Dans ce cas, en utilisant l’API Query et avec une taille de page de 25 Ă©lĂ©ments par page, le paging La section de configuration dans la source de l’API REST Coveo ressemblait Ă  ceci :

...
"paging": {
  "pageSize": 25,
  "offsetType": "url",
  "nextPageKey": "next.href",
  "parameters": {
    "limit": "take"
  },
  "totalCountKey": "total_items"
},
...

Les propriĂ©tĂ©s de pagination correspondantes renvoyĂ©es dans la rĂ©ponse de l’API de requĂȘte (pour la premiĂšre page) ressemblaient Ă  ceci :

{
  "items": [ ... ],
  "total_items": 12345,
  "returned_items": 25,
  "next": {
    "href": "https://{baseURL}/api/entities/query?skip=25&take=25&query=Definition.Name%3D%3D%27M.Asset%27%20AND%20Parent(%27AssetMediaToAsset%27).id%3D%3D1057%20AND%20Parent(%27FinalLifeCycleStatusToAsset%27).id%3D%3D%20544&sort=createdOn&order=Asc",
    ...
  },
  ...
}

Notez que la configuration de la pagination devra peut-ĂȘtre ĂȘtre modifiĂ©e si vous utilisez un autre point de terminaison de l’API Content Hub. Pour plus d’informations sur la configuration de la pagination dans les sources de l’API Coveo REST, reportez-vous au site officiel Documentation.

#5 – La taille du fichier peut affecter les propriĂ©tĂ©s du document dans les extensions đŸ‹ïžâ€â™‚ïž

Dans Coveo, la taille maximale d’un seul Ă©lĂ©ment est d’environ 256 Mo (rĂ©fĂ©rence). Ce numĂ©ro inclut les autorisations, les mĂ©tadonnĂ©es et le contenu de l’élĂ©ment. Pour les fichiers plus volumineux, le contenu n’est pas indexĂ©, uniquement les mĂ©tadonnĂ©es. Cette limite est apparue indirectement sur ce projet rĂ©cent.

Bien qu’en dehors de la portĂ©e de cet article, Coveo prend en charge les extensions qui peuvent ĂȘtre attachĂ©es aux sources de recherche. Les extensions sont des morceaux de code Python que Coveo exĂ©cutera dans le contexte de chaque document lors du traitement de la source. Sur ce projet, une extension a Ă©tĂ© utilisĂ©e pour faire des choses comme rejeter conditionnellement (ignorer l’indexation) des documents, dĂ©finir des champs de mĂ©tadonnĂ©es en fonction d’autres propriĂ©tĂ©s, etc. À un moment donnĂ©, l’extension a tentĂ© de rĂ©soudre l’extension (type de fichier) du document en utilisant le code suivant :

filetype = document.get_meta_data_value("detectedfiletype")[0]

Pour tout document pas au-dessus de la taille maximale, le filetype la variable aurait la valeur attendue : "pdf". Pour tout document qui Ă©taient au-dessus de la taille maximale, la variable avait une valeur gĂ©nĂ©rique qui, bien que non vide, Ă©tait Ă©galement pas le type de fichier attendu. Le document Ă©tant trop volumineux, le document l’objet disponible dans l’extension n’avait pas les valeurs attendues, notamment detectedfiletype. En consĂ©quence, comme le fichier Ă©tait volumineux, une partie de la logique au sein de l’extension a Ă©tĂ© brisĂ©e car ce cas n’a pas Ă©tĂ© pris en compte.

AprĂšs une enquĂȘte plus approfondie sur les fichiers PDF dans Content Hub, il a Ă©tĂ© notĂ© que, parmi les 10 ou alors qui prĂ©sentait systĂ©matiquement des problĂšmes d’indexation, tous d’entre eux avaient une taille de plus de 300 Mo.

Pour plus d’informations sur les extensions de pipeline d’indexation (IPE), veuillez consulter PrĂ©sentation de l’extension du pipeline d’indexation.

Sortie nette : Si vous utilisez une extension sur une source et que vous remarquez que le document l’objet a une ou plusieurs propriĂ©tĂ©s qui ne renvoient pas ce que vous attendez, vĂ©rifiez que le document sous-jacent ne fait pas > 256 Mo et que vous n’essayez pas d’accĂ©der aux propriĂ©tĂ©s de l’extension qui ne le seront jamais. rĂ©soudre correctement.

Merci pour la lecture! 🙏






Source link
Quitter la version mobile