Recherche de texte intégral WordPress avec ElasticSearch

WordPress est un excellent logiciel: il alimente des millions de sites Web bien que sa fonction de recherche native ne soit pas aussi puissante qu'elle le pourrait. En fait, Automattic utilise une solution différente pour la recherche sur WordPress.com. Découvrez un excellent article de blog et une présentation sur l'article de blog et une présentation sur Elasticsearch sur Automattic.

Le problème de recherche WordPress

Quel est le problème avec la recherche WordPress? En termes simples, c’est une solution naïve avec une simple requête MySQL pour rechercher.

  • WordPress trie le résultat de la recherche en fonction de l'âge de publication, en fonction de la pertinence du résultat par rapport au terme recherché.
  • La recherche est juste une combinaison de COMME, avec %question% ce qui signifie qu'aucun index n'est utilisé. Sans indexation, votre base de données peut être rapidement détruite sur un site très fréquenté si vous effectuez beaucoup de recherches..
  • Il cherche la phrase exacte. Si je recherche "zsh on arch linux", WordPress ne renvoie aucun résultat, même si vous avez beaucoup de posts contenant ces mots. En général, vous ne vous attendez pas à ce qu'un utilisateur entre une phrase exacte,?
  • Il ne supporte pas la recherche floue. Si les utilisateurs font une faute de frappe, ils n'ont aucune chance d'obtenir un résultat attendu.

Pensons à un site de paroles où les utilisateurs peuvent se souvenir de plusieurs mots de la chanson et veulent trouver les paroles d'une chanson entière. Pour rendre cela plus complexe, supposons que les utilisateurs ne parlent peut-être pas anglais et cherchent une chanson en anglais. Ils sont très susceptibles de faire une faute de frappe en tapant en anglais, et sans recherche floue, nous perdons ces utilisateurs.

Nous allons surmonter ces problèmes en utilisant un moteur de recherche pour indexer et rechercher nos données. Nous pouvons penser à utiliser MySQL Full Text Search ou quelque chose de similaire. Bien que ce soit possible, ce n’est peut-être pas la meilleure solution. Vous devez définir un schéma, modifier la base de données WordPress par défaut, ajouter des index, etc..

Lorsque vous souhaitez réindexer une grande table, vous pouvez introduire un verrou et empêcher le site d’accepter une nouvelle publication ou une nouvelle soumission. De plus, cela reste un succès pour votre base de données MySQL. Sur les sites à fort trafic avec beaucoup de recherche, cela peut ralentir la base de données. Lorsque vous utilisez un produit comme ElasticSearch, vous éliminez ces choses. Il est rapide, efficace, optimisé pour la recherche avec de nombreuses fonctionnalités supplémentaires et signifie même sans schéma que vous pouvez ajouter, supprimer facilement des champs..

Dans ce tutoriel, nous allons passer en revue les deux étapes suivantes:

  1. Configurer ElasticSearch.
  2. Configurer un plugin pour indexer les données dans ElasticSearch et les rechercher.

La bonne chose est que le plugin aura recours à la recherche par défaut de WordPress si le serveur ElasticSearch tombe en panne.

Exigences

Vous devez utiliser un VPS pour installer un moteur de recherche dessus. Si vous utilisez un service d'hébergement partagé normal, vous pouvez utiliser OpenShift comme serveur alternatif pour installer notre moteur de recherche ultérieurement.

La beauté d'ElasticSearch

ElasticSearch est un moteur de recherche et d'analyse en temps réel, flexible et puissant, distribué. Vous pouvez y envoyer les données et les avoir indexées et disponibles pour une recherche rapide. Il est hautement optimisé pour son travail: la recherche. De plus, les résultats incluent une valeur indiquant si les données correspondent bien au terme recherché. ElasticSearch est même livré avec une API REST qui vous permet d’interroger facilement la recherche ou de la jouer pendant les tests / développement avec un outil comme Sense.

Consultez la page d'accueil si vous voulez en savoir plus à ce sujet. Leur site est abondamment documenté. Pour des conseils supplémentaires, consultez la page sur le dépassement de capacité.

1. Installer ElasticSearch sur votre serveur

En fonction de votre distribution Linux, vous devrez peut-être consulter sa documentation pour savoir comment installer ElasticSearch. Alternativement, vous pouvez suivre le tutoriel générique de ElasticSearch.

Ubuntu / Debian (ou distributions basées sur APT)

$ wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add - $ sudo sh -c 'echo "deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main"> /etc/apt/sources.list' $ sudo apt-get update # We besoin de Java pour ElasticSearch $ sudo apt-get installer openjdk-7-jre-headless -y $ sudo apt-get installer elasticsearch # Exécuter elasticsearch lors du démarrage de $ sudo update-rc.d valeurs par défaut de elasticsearch 95 10 $ sudo / etc / init. d / elasticsearch start

Centos / RedHat (ou distributions basées sur YUM)

$ rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch$ vim /etc/yum.repos.d/elastic.repo

Après l’installation, placez-le dans le fichier de configuration ElasticSearch:

[elasticsearch-1.1] name = référentiel Elasticsearch pour 1.1.x packagesbaseurl = http: //packages.elasticsearch.org/elasticsearch/1.1/centosgpgcheck=1gpgkey=http: //packages.elasticsearch.org/GPG-KEY-elasticsearchenabled=1

Enregistrez le fichier. Et continuez à installer avec Miam. Notez que nous devons installer Java 6 depuis un référentiel tiers si votre référentiel CentOS n’a pas Java 6..

$ sudo yum install elasticsearch # Faites le bon choix en démarrant $ sudo / sbin / chkconfig --add elasticsearch # Nous avons besoin de Java6 + pour ElasticSearch # Ignorez cette section si vous aviez Java6 + $ sudo rpm --import http://apt.sw.be /RPM-GPG-KEY.dag.txt $ sudo wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm $ sudo rpm -Uhv rpmforge -release-0.5.2-2.el6.rf.x86_64.rpm $ sudo yum installer java-1.6.0-openjdk.x86_64 -y # le démarrer $ sudo service elasticsearch start 

Après avoir démarré ElasticSearch, vous pouvez vérifier son bon fonctionnement en visitant votre domaine sur le port 9200 en tant que votredomaine.com:9200 dans le navigateur ou en exécutant un boucle demande.

$ curl 127.0.0.1:9200 "ok": true, "status": 200, "nom": "Jessica Jones", "version": "numéro": "0.90.7", "build_hash": "36897d07dadcb70886db7f149e645ed3d44eb5f "," build_timestamp ":" 2013-11-13T12: 06: 54Z "," build_snapshot ": false," lucene_version ":" 4.5.1 "," slogan ":" Vous savez, pour la recherche "

Si vous ne possédez pas de SMV et souhaitez quand même l'utiliser, vous pouvez utiliser une plate-forme comme OpenShift pour y installer ElasticSearch. Si vous avez installé ElasticSearch sur votre serveur, passez à la section suivante..

2. Installer ElasticSearch sur OpenShift

ElasticSearch peut être installé facilement en téléchargeant le progiciel et en exécutant le binaire. Java 6 est la seule dépendance dont il dispose. OpenShift nous donne une sorte de serveur virtuel sur lequel nous pouvons installer notre propre logiciel.

Inscrivez-vous pour un compte à https://www.openshift.com/. Ensuite, connectez-vous à votre tableau de bord ou entrez cette URL https://openshift.redhat.com/app/console/applications après vous être connecté. Cliquez sur "Applications", puis tapez "DIY" pour filtrer la boîte..

Cliquez ensuite sur le titre "Faites-le vous-même 0.1" pour ajouter l'application à votre compte. Cela signifie que nous allons configurer l'application nous-mêmes. À partir de là, vous aurez la possibilité de nommer votre application et d’obtenir un sous-domaine comme appnamesubdomain.rhccloud.com. Attendez un instant que le provisionnement soit terminé, puis cliquez sur "Continuer vers la page de présentation de l'application" pour accéder à la page de présentation de votre application..

Sur cette page, vous verrez le nom de domaine de votre application. Nous en aurons besoin plus tard pour configurer l'URL du serveur ElasticSearch. En bas à droite, vous pouvez voir le "Accès à distance". Avec cet accès, nous pourrons exécuter la commande shell et installer des choses comme nous le faisons avec un VPS normal. Nous allons collecter des informations SSH pour un accès à distance à notre application et y installer ElasticSearch..

Noter la ssh [email protected] commande, nous allons l'utiliser pour accéder à distance à notre serveur sur OpenShift. diy-notyim.rhcloud.com est l'adresse de votre serveur, ssh est la commande que nous utilisons pour l'accès à distance.

Pour vous connecter via SSH, vous devez donner votre clé publique à OpenShift. Clique sur le Réglage onglet puis cliquez sur Ajouter une nouvelle clé…

Il suffit de copier et coller le contenu de votre clé publique dans celui-ci. Votre clé publique est généralement en ~ / .ssh / id_rsa.pub. Si vous n'êtes pas familier avec les clés publiques, lisez ces tutoriels pour savoir comment les générer:

  1. Configuration des clés SSH
  2. SSH: quoi et comment

Une fois que vous avez ajouté votre clé sur le site Web OpenShift, exécutez cette commande pour vous y connecter. Notez que votre adresse sera différente de la mienne.

ssh [email protected]
Vous serez accueilli avec un écran comme celui-ci:
 ************************************************* ******************** Vous accédez à un service destiné uniquement aux utilisateurs autorisés. Si vous n'avez pas d'autorisation, arrêtez de l'utiliser immédiatement. Toute utilisation des services est soumise aux termes et conditions applicables du contrat, à l’adresse suivante: https://www.openshift.com/legal ****************** ************************************************* Bienvenue dans le shell OpenShift Ce shell vous aidera à gérer les applications OpenShift. !!! IMPORTANT !!! IMPORTANT !!! IMPORTANT !!! L'accès à Shell est assez puissant et il est possible que vous endommagiez accidentellement votre application. Procédez avec précaution! Si le pire venait à se dégrader, détruisez votre application avec "rhc app delete" et recréez-la !!! IMPORTANT !!! IMPORTANT !!! IMPORTANT !!! Tapez "aide" pour plus d'informations. [diy-notyim.rhcloud.com 536ea3e4500446d9db000279] \>

Nous allons télécharger et installer ElasticSearch manuellement. Cependant, nous devons stocker le fichier de téléchargement dans le dossier $ OPENSHIFT_DATA_DIR en raison de sa persistance entre le déploiement. Pendant le déploiement, OpenShift supprime la quasi-totalité des fichiers et des dossiers et utilise l'instruction de construction du raccordement de l'application pour créer et déployer votre application..

Notez que OpenShift a un dossier spécial utilisé pour stocker des données persistantes entre plusieurs déploiements.. $ OPENSHIFT_DATA_DIR est le chemin de stockage de la variable d'environnement. Commande ci-dessous pour télécharger, installer et exécuter ElasticSearch.

$ cd $ OPENSHIFT_DATA_DIR $ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.tar.gz $ tar xvf elasticsearch-1.1.1.tar.gz $ cd elasticsearch-1.1.1 
Une fois dans le dossier elasticsearch-1.1.1, vous devez changer les clés et les valeurs dans le fichier config / elasticsearch.yml. Vous pouvez utiliser nano ou vi / vim pour éditer le fichier et éditer ces valeurs.
network.host: $ OPENSHIFT_DIY_IP transport.tcp.port: 3306 http.port: $ OPENSHIFT_DIY_PORT discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: []
Une fois que vous modifiez et enregistrez-le. Lancer ElasticSearch.
# Arrêtez l'application par défaut DIY pour libérer le port $ ctl_app stop $ bin / elasticsearch &
Attendez un moment pour le lancer. À partir de là, votre URL ElasticSearch peut être atteinte via le domaine que nous avons configuré précédemment. Dans mon cas, c'est http://diy-notyim.rhccloud.com. Notez que nous n'utilisons pas le port par défaut 9200 car OpenShift ne nous permet pas de nous y connecter; par conséquent, nous utilisons le port 8080 qui est défini par la variable environnementale $ OPENSHIFT_DIY_PORT. Nous ne lions que pour notre adresse IP interne et OpenShift transmettra à une adresse IP publique au port 80 pour nous. De ce fait, vous pouvez accéder directement à l’URL http://diy-notyim.rhccloud.com sans spécifier de port. Nous devons également arrêter l'application interne de bricolage avec ctl_app arrêtez pour libérer le port avant de courir elasticsearch.Exécution d’ElasticSearch sur OpenShift, liaison sur le port 8080 au lieu du port 9200

3. Configurer le plugin

Téléchargez et installez le plugin à partir du référentiel de plugins WordPress. Extrayez-le dans le wp-content / plugins dossier et l'activer. Ou si vous utilisez wp-cli, c'est simple comme bonjour.

wp installer fantastique-elasticsearch wp activer fantastique-elasticsearch

En rechargeant le tableau de bord WordPress, un nouvel élément de menu pour ElasticSearch devrait apparaître. De là, configurons-le.

La plupart des champs sont clairement décrits pour vous aider à le configurer. Voici quelques résumer.

Intégration WordPress

Cet onglet contient le paramètre permettant d’utiliser ElasticSearch ou non. Cet onglet nous permet également de sélectionner les catégories à inclure dans ElasticSearch..

Paramètres du serveur

Configurez le serveur ElasticSearch et le nom de l'index. Le nom de l'index est similaire au nom de la base de données dans MySQL. Vous avez un serveur MySQL et plusieurs bases de données à l'intérieur. Vous pouvez utiliser n'importe quel nom dans la mesure où il est utilisé par un service différent..

Si ElasticSearch est installé sur le même ordinateur et que vous utilisez le paramètre par défaut, vous pouvez laisser le nom du serveur vide. sinon, spécifiez votre URL. Par exemple, si j’utilisais OpenShift comme indiqué ci-dessus, j’entrerais http://diy-notyim.rhcloud.com/ comme URL du serveur..

Indexation du contenu

Vous pouvez choisir le type de message, le champ de publication ou les champs de taxonomie à indexer par ElasticSearch. Une fois qu'un élément est indexé, il sera consultable via ElasticSearch. Vous pouvez choisir d'indexer des publications, des pages, des champs personnalisés ou tout type de publication personnalisée en fonction de vos besoins..

Résultat Scoring

C'est une chose importante pour trier le résultat. Par exemple, une correspondance dans un titre de publication peut être considérée comme plus exacte qu'une correspondance dans un contenu de publication. Par conséquent, nous devrions définir une valeur de score plus petite pour le contenu du message. De même, si une correspondance de balise a plus de valeur qu'une correspondance dans le titre, nous définirons une valeur plus élevée pour post_tag.

Mon réglage de score, vous devriez le changer et l'adapter à vos propres besoins

Longueur du préfixe flou

Cela fait référence au nombre de caractères pouvant être échangés pour correspondre aux mots. Par exemple: si je cherchais Lonux, puis Linux considère toujours une correspondance: L (i) nux-> L (o) nux. Plus le nombre est petit, meilleure est la performance. Ne placez pas ceci trop haut. Je pense que 0-2 sont les plus raisonnables.

Gérer l'index

Une fois que tout est configuré ou modifié, il est temps d'appliquer le changement. Lorsque vous cliquez sur Réindexer, il devrait apparaître quelque chose comme ci-dessous:

Une fois l'indexation terminée. Essayez de chercher quelque chose sur votre site, cherchez une phrase, activez / désactivez la recherche entre défaut et ElasticSearch pour voir la différence. Voici le résultat de ma recherche avec la recherche par défaut de WordPress:

Aucun résultat lorsque zsh arch linux avec recherche par défaut

Voici le résultat de la recherche avec ElasticSearch.

Un tas de messages avec ElasticSearch

Conclusion

En quelques étapes simples, nous avons mis en place un puissant moteur de recherche sur notre site. Plus le résultat de la recherche est précis, meilleure sera l'expérience de nos visiteurs. Si votre site génère un trafic important et qu'une seule installation ElasticSearch n'est pas en mesure de gérer la recherche, vous pouvez ajouter davantage de nœuds à ElasticSearch pour effectuer une recherche distribuée..

Notez que par défaut, ElasticSearch ne vient pas avec l'authentification, mais vous devriez probablement utiliser un pare-feu pour limiter l'accès à ElasticSearch à partir d'adresses IP publiques. Ou peut-être un meilleur moyen consiste-t-il à lier ElasticSearch à une adresse IP interne et à le rendre disponible uniquement via un réseau local.

S'il vous plaît laissez un commentaire et laissez-nous savoir comment votre site fonctionne après l'installation de ce plugin.