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