# Recherche interne migrée vers Typesense chez un cabinet de recrutement

> La recherche par mots-clés d'un cabinet de recrutement peinait à répondre vite dès que plusieurs filtres se combinaient. Migration vers Typesense pour réduire le temps de réponse perçu.

- Auteur : Clément Hadrot
- Publié le : 2026-05-21
- Mis à jour le : 2026-05-21
- Catégorie : Performance
- URL : https://wpmoderne.dev.wordpress-developpement.fr/performance/recherche-interne-typesense-cabinet-recrutement/

## L’essentiel

- Une recherche WP_Query classique combine mal texte libre et filtres multiples à grande vitesse
- Typesense indexe les fiches en dehors de MySQL et répond en quelques millisecondes
- La synchronisation entre WordPress et l'index reste le point de vigilance principal

`curl "http://localhost:8108/collections/offres/documents/search?q=développeur&query;_by=titre,competences"` — cette requête, envoyée directement à un serveur Typesense installé en interne, répond en moins de vingt millisecondes là où l'ancienne recherche interne d'un cabinet de recrutement mettait plus d'une demi-seconde à combiner un mot-clé avec deux filtres de localisation et de niveau d'expérience.

## Le point de départ : une recherche à facettes trop gourmande

Le site du cabinet permettait aux candidats de rechercher une offre par mot-clé libre, tout en filtrant simultanément par ville et par niveau d'expérience requis. Cette combinaison, construite au fil du temps par ajouts successifs de `meta_query` et de `tax_query` sur une requête `WP_Query` existante, finissait par générer des jointures SQL coûteuses dès que le catalogue d'offres dépassait quelques centaines de fiches actives.

Le temps de réponse mesuré côté serveur, hors cache, dépassait régulièrement 600 millisecondes lorsque les trois critères — mot-clé, ville, expérience — étaient renseignés en même temps, une combinaison pourtant fréquente chez les candidats les plus qualifiés dans leur recherche.

## Pourquoi la recherche native de WordPress atteint ses limites ici

MySQL, moteur relationnel généraliste, reste correct pour une recherche texte libre isolée, mais devient nettement moins efficace dès qu'il faut combiner cette recherche avec plusieurs filtres de facettes exécutés simultanément, un usage pour lequel il n'a jamais été spécifiquement conçu.

> L'essentiel à retenir : Une recherche WP_Query classique combine mal texte libre et filtres multiples à grande vitesse ; Typesense indexe les fiches en dehors de MySQL et répond en quelques millisecondes ; La synchronisation entre WordPress et l'index reste le point de vigilance principal

## La migration vers un moteur de recherche dédié

Le choix s'est porté sur Typesense, un moteur de recherche open source auto-hébergeable, conçu spécifiquement pour la recherche à facettes rapide, avec un temps de réponse annoncé et vérifié sous les cinquante millisecondes même sur des volumes de plusieurs dizaines de milliers de documents.

1. Installation d'un serveur Typesense sur une machine dédiée, séparée du serveur applicatif WordPress
2. Création d'une collection `offres` avec un schéma déclarant les champs indexés et leur type
3. Synchronisation initiale de l'ensemble des offres existantes via un script WP-CLI personnalisé
4. Ajout d'un hook sur `save_post` pour maintenir l'index à jour à chaque publication ou modification

```
add_action( 'save_post_offre_emploi', function ( $post_id ) {
    if ( wp_is_post_revision( $post_id ) ) {
        return;
    }
    wpmoderne_synchroniser_typesense( $post_id );
}, 10, 1 );
```

## Le point de vigilance : garder l'index synchronisé

Un moteur de recherche externe introduit un nouveau risque : le décalage entre le contenu réel dans WordPress et l'index interrogé par les visiteurs. Une offre retirée du site mais encore présente dans l'index continuerait d'apparaître dans les résultats de recherche jusqu'à sa suppression explicite de la collection Typesense.

- Un hook sur la suppression d'une offre retire systématiquement le document correspondant de l'index
- Une tâche de vérification hebdomadaire compare le nombre de documents indexés au nombre d'offres publiées
- Une réindexation complète reste possible à tout moment via une commande WP-CLI dédiée en cas de doute

> Changer de moteur de recherche ne résout rien si personne ne garde un œil sur la fraîcheur de l'index une fois la migration terminée.

## En résumé

La migration vers Typesense a réduit le temps de réponse perçu d'une demi-seconde à moins de vingt millisecondes sur les recherches combinant plusieurs filtres, un gain suffisant pour changer sensiblement l'expérience des candidats les plus exigeants dans leur recherche. Ce billet ne traite pas du classement des résultats de recherche, qui reste un sujet distinct de la seule rapidité de réponse.
