Rapport de recherche sur l'état de la recherche sur site dans l'enseignement supérieur avec The Chronicle of Higher Education | Télécharger le rapport
Rapport de recherche sur l'état de la recherche sur site dans l'enseignement supérieur avec The Chronicle of Higher Education | Télécharger le rapport

14 décembre 2023

Kevin Montgomery

|

10 min de lecture

Comment utiliser les API SearchStax avec WordPress

La recherche est une fonctionnalité essentielle pour la plupart des sites web. Elle permet à vos visiteurs de trouver du contenu sur votre site sans avoir à naviguer dans les menus et les liens. Il leur suffit de saisir ce qui les intéresse et de sélectionner le résultat le plus adapté à leurs besoins.

De nombreux systèmes de gestion de contenu incluent ou prennent en charge la recherche de site de base, mais ces fonctionnalités de recherche simples peuvent être difficiles à mettre à l'échelle, manquer de personnalisation et ne sont pas faciles à optimiser pour la conception de votre site et les besoins des visiteurs.

Recherche gérée SearchStax et Recherche sur le site SearchStax Tous deux fournissent le moteur de recherche et l'infrastructure nécessaires à la recherche sur site, sans avoir à gérer de serveurs, à faire évoluer l'infrastructure ni à gérer les mises à niveau logicielles et de sécurité. SearchStax simplifie l'intégration d'une recherche de site web puissante et personnalisable à tout site web ou CMS grâce à nos API de recherche intuitives.

Nous vous montrerons comment configurer SearchStax Managed Search ou Site Search et ajouter une recherche sur site en utilisant WordPress comme exemple. Voici le dépôt GitHub pour le module WordPress SearchStax Cet article est basé sur ce module. Vous pouvez cloner ou télécharger ce module WordPress et l'ajouter à votre site WordPress pour utiliser SearchStax. Nombre de ces appels d'API et modèles de conception sont applicables à d'autres systèmes de gestion de contenu et langages back-end.

Voici ce qu'il y a à l'intérieur :

  • Introduction à SearchStax Managed Search et à la recherche sur site
  • Autorisation et connexion aux API SearchStax
  • Configuration des champs de recherche et du schéma
  • Préparation de l'indexation du contenu
  • Indexation par lots
  • Mise à jour des éléments de l'index
  • Suppression d'éléments de l'index de recherche

Que sont SearchStax Managed Search et Site Search ?

Recherche gérée SearchStax et Recherche sur le site SearchStax sont des solutions de recherche gérées par Solr. SearchStax gère l'infrastructure, la mise à l'échelle et le déploiement des instances Solr et fournit des API et des tableaux de bord conviviaux pour gérer vos index de recherche.
Les index SearchStax Managed Search et Site Search peuvent être interrogés et gérés avec des API basées sur JSON. Il est donc facile de configurer des champs de recherche, d'indexer des documents, d'obtenir des résultats de recherche et bien plus encore via les API.

Connexion aux API SearchStax

SearchStax fournit des points de terminaison d'API pour les opérations en lecture seule (telles que l'interrogation des résultats de recherche) et les opérations administratives de lecture/écriture, telles que l'indexation de nouveau contenu, la suppression d'éléments de l'index et la mise à jour du schéma. Les requêtes d'API doivent inclure le jeton d'autorisation pour toutes les opérations de lecture et d'écriture/mise à jour.

Vous devez protéger vos jetons de requête et éviter d'exposer publiquement les jetons de lecture/écriture. Les jetons en lecture seule doivent également être protégés de toute exposition publique afin d'éviter que des acteurs malveillants n'abusent ou n'utilisent excessivement les requêtes API mensuelles limitées.

Dans cet exemple, nous effectuerons des appels à l'API SearchStax depuis le back-end WordPress. Cela garantit que les requêtes de recherche et les mises à jour ne peuvent provenir que des actions du front-end WordPress (administrateurs du site ou visiteurs). Cela permet de protéger les points de terminaison et les jetons de l'API contre toute fuite publique.

De nombreuses requêtes API SearchStax peuvent être effectuées en transmettant des données dans des paramètres d'URL avec une requête GET au point de terminaison de l'API et en incluant le jeton d'autorisation dans l'en-tête de la requête.

				
					curl "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/select?q=*:*&wt=json" \ -H "Autorisation : Jeton <_readToken_>"
				
			

D'autres peuvent nécessiter le passage d'un objet JSON dans un corps de requête POST pour modifier ou mettre à jour l'index.

				
					curl -X POST "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/select?q=*:*&wt=json" \ -H "Autorisation : Jeton <_readToken_> \ ,Type de contenu : application/json" -d "{ "add-field": { "name": "title", "type": "string", "indexed": true, "required": false, "stored": true, "multiValued": false } }"
				
			

Intégration – Détails du compte et connexion à votre instance SearchStax

La première étape de l'indexation du contenu d'un site consiste à stocker les informations de l'API et des jetons afin de pouvoir effectuer des requêtes. Dans notre exemple WordPress, nous capturons les URL des points de terminaison de l'API et les jetons d'accès avec un page d'options de l'administrateur. D'autres options incluent le stockage des URL et des jetons d'accès dans des variables d'environnement et leur inclusion dans le processus de déploiement afin que votre site Web ou CMS puisse y accéder en toute sécurité pour effectuer des requêtes API.

Une fois que l'administrateur a fourni les informations d'identification pertinentes, vous pouvez faire une demande au point de terminaison SELECT et vous devriez obtenir la réponse suivante si votre compte et votre index Solr sont correctement configurés.

				
					curl "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/select?q=*:*&wt=json" \ -H "Autorisation : Jeton <_readToken_>" // réponse { statut : 0, QTime : 13 }
				
			

Une réponse qui inclut « status : 0 » signifie que la demande a réussi.

Intégration - Configuration de l'index de recherche

Maintenant que nous pouvons nous connecter à l'API SearchStax, nous pouvons commencer à configurer l'index de recherche pour notre site et le contenu que nous allons indexer.

Nous allons utiliser l'API UPDATE pour configurer les champs de recherche et le schéma. Nous utiliserons les champs de type de publication, de catégorie et de balise inclus dans WordPress pour nos facettes. Nous définirons également quelques autres champs de publication WordPress standard.

Cet exemple ajoute un balises et définit le type sur « string » et la variable multiValued sur « true ». Nous pourrons utiliser ce champ ultérieurement pour le facettage afin de renvoyer les balises pertinentes pour chaque article inclus dans les résultats de recherche.

				
					curl -X POST "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/select?q=*:*&wt=json" \ -H "Autorisation : Jeton <_readToken_> \ ,Type de contenu : application/json" -d "{ "add-field": { "name": "tags", "type": "string", "indexed": true, "required": false, "stored": true, "multiValued": true }, //...champs supplémentaires..., }"
				
			

Idéalement, vous ne devriez pas avoir besoin de modifier votre schéma de recherche après sa configuration initiale, mais vous devrez mettre à jour votre schéma de recherche si vous ajoutez de nouveaux champs ou facettes à votre site afin qu'ils puissent être indexés correctement.

Intégration - Préparation du contenu

Maintenant que nous nous sommes connectés à l'instance SearchStax et que nous avons configuré les champs et leur schéma, nous pouvons commencer à préparer le contenu du site à envoyer à l'index de recherche.

Les index de recherche SearchStax utilisent un champ d'identifiant unique pour suivre chaque document. Nous devons créer une convention de nommage des identifiants de document afin de garantir l'unicité du contenu indexé et sa correspondance avec celui stocké dans le CMS ou la base de données. Dans de nombreux cas, nous pouvons réutiliser les identifiants uniques internes déjà utilisés par votre CMS pour suivre les pages.

Dans notre Exemple WordPress Nous pouvons créer une fonction qui générera une requête JSON pour un article avec les champs correspondant au schéma de recherche. Les identifiants uniques des documents utilisent le préfixe « post-type » suivi de l'identifiant de l'article (WordPress gère les pages et les articles séparément ; si nous utilisions uniquement l'identifiant de l'article, nous risquions d'écraser les pages ou les articles ayant le même identifiant).

Cette fonction accepte un objet de publication WordPress et l'ID de document Solr utilisé pour identifier la publication. Nous allons limiter le champ « corps » à 100 000 caractères par publication, et le champ « résumé » utilisera les 300 premiers caractères du contenu du corps si aucun résumé n'est disponible.

				
					public function post_to_solr_json( $post, $solr_id ) { $max_doc_size = 100000; $max_summary_length = 300; $post_categories = wp_get_post_categories($post->ID); $categories = array(); foreach ( $post_categories as $this_category) { $category = get_category($this_category); $categories[] = $category->name; } $post_tags = wp_get_post_tags($post->ID); $tags = array(); foreach ( $post_tags comme $ce_tag) { $tags[] = $ce_tag->nom; } $solrDoc = array(); $solrDoc['id'] = $solr_id; $solrDoc['title'] = $post->titre_du_post; if( $post->extrait_du_post != '' ) { $solrDoc['summary'] = $post->extrait_du_post; } else { $solrDoc['summary'] = substr( wp_strip_all_tags( $post->contenu_du_post, true ), 0, $longueur_maximale_du_summary ); } $solrDoc['body'] = substr( $post->post_content, 0, $max_doc_size ); $solrDoc['thumbnail'] = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'thumbnail' ); $solrDoc['guid'] = $post->guid; $solrDoc['url'] = get_permalink($post); $solrDoc['post_date'] = $post->post_date; $solrDoc['post_type'] = $post->post_type; $solrDoc['post_author'] = $post->post_author; $solrDoc['categories'] = $categories; $solrDoc['tags'] = $tags; return $solrDoc; }
				
			
Nous pouvons appeler cette fonction lors de l'indexation de contenu par lots ou lors de l'ajout ou de la mise à jour de pages individuelles. Un gestionnaire commun garantit que tout le contenu du site sera indexé avec les champs appropriés et pourra être recherché correctement.

Intégration - Indexation du contenu

Les index de recherche peuvent être mis à jour par lots ou individuellement, selon les besoins. Lors de l'ajout initial d'une recherche sur un site existant, nous souhaitons indexer tout le contenu disponible pour commencer. Ensuite, nous pouvons mettre à jour les documents individuels de l'index de recherche en fonction des modifications du contenu des pages.

SearchStax Managed Search et Site Search appliquent des limites de requêtes et d'API différentes selon votre abonnement, notamment la taille maximale des requêtes, le nombre maximal de requêtes par minute et le nombre total maximal de documents dans l'index. Vous devrez configurer vos opérations de traitement par lots afin de limiter le nombre de documents dans votre index et de maintenir la taille de vos requêtes sous les limites.

Pour notre plugin WordPress, nous devons récupérer tous les articles dont le statut est « publier ». Nous récupérerons le JSON Solr de chaque article grâce à la fonction précédemment développée, puis nous soumettrons ces documents à l'index de recherche par lots.

Dans cet exemple, nous soumettons 20 publications par lot et attendons 250 millisecondes entre chaque requête, avec un temps de traitement maximal de 30 secondes. Nous vérifions le code de réponse de l'API pour chaque lot et enregistrons la durée totale de la requête afin de détecter les erreurs ou d'éviter de dépasser les limites de l'API.

				
					public function index_content() {
    $return = array();
    $return['status'] = 'none';
    $return['data'] = array();
    $post_batch = array();

    $posts = get_posts([
      'post_status' => 'publish',
      'numberposts' => -1
    ]);

    foreach ( $posts as $post ) {
   	 $post_batch[] = $this->post_to_solr_json($post, $post->post_type . '_' . $post->ID);
    }

    $batch_size = 20;
    $batches = ceil(count($post_batch) / $batch_size);
    $timeout = time() + 30;
    $delay = 250;
    $data = array();

    for ( $i = 0; $i < $batches; $i++ ) {
   	 $status = $this->push_to_solr( array_slice( $post_batch, $i * $batch_size, $batch_size ) );

   	 if ( $status['status'] == 'success' ) {
   		 $data = array_merge( $data, $status['data'] );
   	 }
   	 else {
   		 $return['status'] = $status['status'];
   		 break;
   	 }

   	 if ( time() > $timeout ) {
   		 $return['status'] = 'timeout';
   		 break;
   	 }
   	 set_time_limit(20);
   	 usleep( $delay );
    }

    if ( $return['status'] == 'none' ) {
   	 $return['status'] = 'success';
   	 $return['data']['posts'] = 'Successfully indexed ' . count( $data ) . ' items';
    }
    return json_encode( $return );
}

				
			
Si aucune erreur n'a été renvoyée par l'API SearchStax et que la fonction d'indexation n'a pas expiré, la mise à jour par lot a réussi. Nous pouvons mettre à jour notre objet « return » et inclure le nombre de documents ajoutés pendant le traitement par lot.

Configuration du plugin - Mise à jour du contenu

Une fois un document soumis à l'index de recherche, il peut être facilement mis à jour lorsque la publication d'origine a été modifiée. Il suffit d'effectuer une mise à jour avec un seul objet document, incluant l'ID et les autres champs mis à jour.
				
					curl -X POST "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/select?q=*:*&wt=json" \ -H "Autorisation : Jeton <_readToken_> \ ,Type de contenu : application/json" -d "[ { "id": "post_123", "title": "Titre du message", ... } ]"
				
			

Suppression de contenu

À mesure que les sites sont mis à jour et que les pages changent, nous devrons probablement supprimer du contenu de l'index Solr. Cette opération peut être effectuée document par document ou, si nécessaire, nous pouvons vider l'index entier pour repartir à zéro.

Suppression d'un document individuel

Nous pouvons supprimer un document en soumettant une demande de suppression au point de terminaison de l'API UPDATE et en incluant l'ID du document dans le corps de la demande.

				
					curl -X POST "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/update" \ -H "Autorisation : Jeton <_readToken_> \ ,Type de contenu : application/json" -d "{"delete":"post_id_123"}"
				
			

Supprimer tout dans l'index de recherche

Il peut être nécessaire de supprimer tout ce qui se trouve dans l'index de recherche et de recommencer si nous avons apporté des modifications majeures au site, si nous ne voulons pas supprimer des documents individuels ou si nous avons apporté des modifications au schéma.

				
					curl -X POST "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/update" \ -H "Autorisation : Jeton <_readToken_> \ ,Type de contenu : application/json" -d "{"delete": {"query": "*:*"}}"
				
			

Cette demande supprime tout ce qui correspond à la requête générique (chaque document indexé) et n'est pas réversible.

Interrogation et obtention de résultats de recherche

Une fois le contenu indexé, nous pouvons commencer à interroger et à générer des résultats de recherche. Généralement, les recherches nécessitent un terme de recherche et le(s) champ(s) à interroger pour ce terme. Parmi les fonctionnalités de recherche avancées, on trouve l'affichage des facettes de recherche, l'ajustement de la pertinence de la recherche et le tri des résultats selon un champ ou une méthode de tri donnés.

Demande de recherche de base

Les requêtes de recherche peuvent être effectuées via une simple requête GET au point de terminaison SELECT, en utilisant le jeton en lecture seule. La requête suivante renverra tous les documents contenant le mot-clé. terme de recherche.
				
					curl "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/select?q=body:*search_term*&wt=json" \ -H "Autorisation : Jeton <_readToken_>"
				
			
Cette fonction renvoie tous les documents correspondants de l'index. Les réponses sont paginées et ne renvoient qu'un nombre maximal de lignes (10 par défaut et jusqu'à 100 si le paramètre « rows » est inclus). La réponse indique également le nombre total de documents correspondants, ce qui permet d'effectuer des requêtes supplémentaires pour obtenir tous les résultats de recherche.

Recherche avancée avec facettes

Nous pouvons affiner les résultats de recherche en incluant des facettes, un tri et d'autres paramètres de recherche avancés (des sauts de ligne ont été ajoutés à l'URL pour plus de lisibilité).
				
					curl "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/select ?q=body:*search_term* &rows=50 &facet=true &facet.field=tags &f.tags.facet.sort=index &facet.mincount=1 &wt=json " \ -H "Autorisation : Jeton <_readToken_>"
				
			
Si vous prévoyez d'utiliser des facettes ou un tri, vous devrez vous assurer que les champs de recherche sont correctement définis dans votre schéma de recherche. L'exemple ci-dessus nécessite : balises champs définis dans le schéma afin de renvoyer les facettes appropriées. Nous trions également les balises facettes et ne renvoie les facettes de balise que si elles sont attribuées à des documents dans les résultats de recherche.

Prochaines étapes

Ces exemples constituent un bon point de départ pour utiliser les API SearchStax et créer votre propre implémentation dans votre système de gestion de contenu ou votre site web. Les comptes SearchStax peuvent être étendus avec davantage d'index, des tailles de requêtes plus importantes et des limites de documents, afin de continuer à offrir une excellente expérience de recherche sur votre site, même en pleine croissance.
Puis-je utiliser SearchStax avec WordPress ?

Oui, il est possible d'utiliser SearchStax Managed Search et SearchStax Site Search avec WordPress lorsque vous utilisez nos API REST.

Par Kevin Montgomery

Ingénieur marketing produit

"...Ces exemples sont un bon point de départ pour travailler avec les API SearchStax et créer votre propre implémentation dans votre CMS..."

Vous aimerez peut-être aussi :

fr_CAFrançais du Canada