WCEU 2016 : Elasticsearch pour moderniser la recherche WordPress

Ce n’est pas nouveau, la recherche dans WordPress n’est pas un point fort. Il faut chercher un mot précis et celui-ci doit se trouver dans le titre ou le contenu de l’article pour qu’un contenu ressorte. Avec quelques filtres, il est possible d’améliorer légèrement la recherche en venant scanner certains post_meta par exemple, mais on ne peut guère aller plus loin sans affecter le temps de chargement de la page. Mais ca c’était avant Elasticsearch !

Modernizing WordPress Search with Elasticsearch

Jour 2 – Track 1 – 17:00

Taylor Lovett


La conférence de Taylor Lovett au WordCamp Europe portait sur l’amélioration de la recherche WordPress en utilisant Elasticsearch. Si vous ne connaissez pas encore Elasticsearch, c’est en deux mots un outil qui va indexer vos contenus dans son propre système. Ensuite, grace à un processus peu gourmand en performances, il va vous donner la possibilité de faire de la recherche en temps réel, de faire de la suggestion lorsque vous vous trompez d’une lettre, de faire des tris par pertinence et bien d’autres fonctionnalités très intéressantes. Cet outil de base totalement indépendant à WordPress vient se coupler avec ce dernier à l’aide d’une extension gratuite : ElasticPress.

 

WCEU 2016 : plugin ElasticPress

 

Pour faire fonctionner l’extension ElasticPress, il faut au préalable installer Elasticsearch sur votre serveur. Une fois l’instance Elasticsearch en place et l’extension ElasticPress activée, il faudra lancer une étape d’indexation afin que les contenus WordPress soient présents dans le système Elasticsearch. Une personne dans l’audience demandera en fin de conférence combien de temps ce système d’indexation prendrait avec plusieurs millions de contenus et c’est manifestement très rapide (de l’ordre d’une dizaine de minutes).

 

WCEU 2016 : Elasticsearch with ElasticPress

 

Tout l’intérêt de l’extension ElasticPress est qu’elle fonctionne en toute transparence avec WordPress en venant se greffer sur la fameuse WP_Query.

Cas N°1 : Lorsqu’une recherche WordPress native est lancée, la WP_Query reçoit un paramètre ‘s’ pour search et déclenche automatiquement un appel vers Elasticsearch.

Cas N°2 : Lorsque l’on souhaite activer la recherche Elasticsearch sur une requête manuelle, il suffit de passer le paramètre ‘ep_integrate’ et de lui affecter la valeur true pour une nouvelle fois faire appel aux contenus indexés dans Elasticsearch.

Dans le cas où le paramètre ‘ep_integrate’ n’est pas présent ou est différent de true, Elasticsearch n’est pas sollicité. Ce côté « non intrusif » fait que le jour où vous souhaitez vous séparer de la recherche Elasticsearch, il vous suffira de désactiver l’extension ElasticPress sans qu’il n’y ait quoi que ce soit à nettoyer dans votre base.

 

 

WCEU 2016 : Elasticsearch query

 

Ces requêtes très simple ne font que montrer comment activer ou non Elasticsearch mais il est possible d’aller très loin dans la complexité des recherche comme dans l’exemple ci-dessous :

 

WCEU 2016 : Elasticsearch with complexe query

 

 

Ici, nous cherchons à cibler les résultats correspondant à la recherche « vienna austria » dont les contenus sont présents dans les catégories « term1 » ou « term2 » et en cherchant des le titre, le contenu, le post_meta « city_name » et dans le nom de l’auteur, le tout uniquement sur le site 3 (ce qui en fait évidemment une extension compatible avec l’environnement multi-site).

 

Retrouver la conférence de Taylor ici :