Installer ElasticSearch sur un projet Symfony en 3minutes

Share Button

Read the English version

Cet article est le deuxième d’une série consacrée à Elasticsearch.
Il n’a pas pour but de présenter ce qu’est Elasticsearch, vous pourrez en lire plus par exemple sur ce blog : http://blog.zenika.com/index.php?post/2012/11/14/Premiers-pas-avec-ElasticSearch-Partie-1. Mais il vous permettra de mettre les mains dans le moteur, et de comprendre les articles qui suivront.

L’essentiel : Elasticsearch est un moteur de recherche (d’indexation de documents), open source et clusterisé. Il est basé sur Apache Lucene ,utilisé également par Apache SolR et est développée en Java.

Ses fonctionnalités majeures qui nous concernent :

  • Indexation via filtre/token (par exemple synonymes, worddelimiter, …)
  • Recherche, tri, pagination
  • Navigation par facettes
  • Aggrégations de résultats / Statistiques (Depuis les beta de la 1.0.0)

Nous avons eu la bonne surprise de trouver une librairie PHP, Elastica, qui créée le lien entre PHP et le serveur Elasticsearch (via REST et cURL chez nous) , mais également un bundle FOSElasticaBundle (Anciennement FOQElasticaBundle) qui simplifie la vie lors du démarrage d’un projet.

Installer Elasticsearch 

Installer Elasticsearch se fait à partir d’un paquet! Ce qui est plus simple et plus intégré qu’auparavant : http://www.elasticsearch.org/downloads

Téléchargez le et installez le. Une fois l’installation terminée, Elasticsearch est présent en tant que service : 

$ service elasticsearch status

Votre instance d’Elasticsearch est fonctionnelle. Vous pourrez la configurer via le fichier yml : /etc/elasticsearch/elasticsearch.yml.

Installer le plugin head

Nous conseillons, comme tout le monde, l’installation du plugin “head”. Il vous permet de :

  • Visualiser vos index, vos instances : l’état de votre serveur 
  • Visualiser vos documents
  • Lancer des requêtes (basiques ou complexes). Ce qui servira surtout pendant le debug !

Nous allons l’installer en tant que plugin : et pour ce faire, placez vous à la racine de l’application :

$ cd /usr/share/elasticsearch
$ sudo bin/plugin -install mobz/elasticsearch-head

Et voilà, rendez vous ici : http://localhost:9200/_plugin/head/ pour le voir en action. 4 onglets à savoir utiliser :

  • Apercu : L’état de votre cluster (et de tous les noeuds qui y sont attachés). Vous y verrez les index, et le nombre total de documents présents. Nb : Un cluster Yellow est un cluster composé d’un seul et unique noeud, et donc sans réplication.
  • Navigateur : Vous permet de naviguer dans vos documents, à l’aide de filtres rapides. Utile notamment pour voir à quoi ressemble votre indexation
  • Requêtes structurées : Un assistant à la création de requêtes, et a la visualisation de résultats
  • Autres requêtes : Un interprêteur de requêtes brutes qui sera très utile pour comprendre le fonctionnement des requêtes envoyée par le FOSElasticaBundle.

Le repository Github pour en savoir plus : https://github.com/mobz/elasticsearch-head

 Installer Elastica et FOSElasticaBundle pour Symfony2

Elasticsearch est maintenant installé et prêt à recevoir ses premiers documents ! Pour ce faire nous allons devoir installer le bundle maintenu par FOS, ajoutez le à votre composer.json

{
    "require": {
        "friendsofsymfony/elastica-bundle": "3.0.*@dev"
    }
}

et n’oublions pas d’ajouter le Bundle dans le fichier AppKernel.php :

public function registerBundles()
{
    $bundles = array(
        // ...
        new FOS\ElasticaBundle\FOSElasticaBundle(),
    );
}

Et voilà, la librairie (Elastica) et le Bundle (FOSElasticaBundle) sont installés. Vous pouvez maintenant passer à l’article suivant qui vous montrera comment (bien) indexer votre premier document.

Nous avions également écrit un article sur la configuration d’Elasticsearch. Mais certains éléments abordés dans cet article seront complétés dans les articles à venir.

Share Button

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Protected by WP Anti Spam