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
La solution SearchStax Site Search offre aux spécialistes du marketing l'agilité dont ils ont besoin pour optimiser les résultats du site Web.
Présentation du produitSearchStax Managed Search décharge la gestion de Solr, offrant aux équipes informatiques une agilité opérationnelle accrue.
Présentation du produit14 décembre 2023
Kevin Montgomery
|
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 :
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 } }"
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.
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.
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; }
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 );
}
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", ... } ]"
À 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.
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"}"
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.
curl "https://<api-endpoint>.searchstax.com/<_id_>/<_indexName_>/select?q=body:*search_term*&wt=json" \ -H "Autorisation : Jeton <_readToken_>"
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_>"
Oui, il est possible d'utiliser SearchStax Managed Search et SearchStax Site Search avec WordPress lorsque vous utilisez nos API REST.
The Stack est livré tous les deux mois avec des tendances du secteur, des informations, des produits et plus encore