Elasticsearch sort en version 0.90

20
29
avr.
2013
Java

Elasticsearch est un système distribué, RESTful, reposant sur le moteur de recherche Apache Lucene. Il est développé par Shay Banon et est publié sous la licence Apache Software. Elasticsearch est développé en Java.

ElasticSearch est une réécriture complète du moteur de recherche Compass par son auteur pour prendre en charge au cœur de l’application la montée en charge horizontale (scalability) ; cette réécriture commencée début 2010 lui permet aussi de profiter des avancées du moteur d’index Lucene. Pour plus de détail, lire The Future of Compass & ElasticSearch.

Sommaire

Un projet dynamique

La communauté

Créée le 19 janvier 2010, avec plus de 1300 utilisateurs et plus de 6000 conversations, la liste de diffusion est le pilier central de la communauté.

Une recherche sur github donne plus de mille dépôts ayant le mot "elasticsearch" dans le titre ou dans la description.

L'entreprise

Elasticsearch, l'entreprise, a été fondé en juillet 2012 par 4 personnes :

  • Shay Banon, le développeur principal du projet ;
  • Steven Schuurman, businessman à succès (semble-t-il) ;
  • et deux développeurs Lucene : Uri Boness et Simon Willnauer.

Quatre mois après, en novembre 2012, une première levée de fonds de 10 M$ est réalisée. Trois mois après, en février 2013, une deuxième levée de fonds de 24 M$ voit le jour.

Après deux ans de développement, Elasticsearch est passé du projet purement open source à une entreprise ayant les moyens de soutenir une base d'utilisateurs grossissant à grande vitesse (plus de deux millions de téléchargements) des deux côtés de l'Atlantique.

Ces fonds leur ont permis d'embaucher les personnes les plus actives de la communauté : créateur de plug-in, de bibliothèque ou encore utilisateurs précoces. Parmi ceux-ci, David Pilato qui a initié la liste de diffusion française. L'entreprise propose maintenant des formations et trois niveaux de support jusqu'au 24x7.

Ressources

Une page de la documentation recense les développements communautaires autour d'Elasticsearch : Wrapper, intégration & plug-ins. Parmi ceux-ci, deux plug-ins majeurs :

  • BigDesk qui permet de monitorer son cluster Elasticsearch ;
  • Head qui offre une interface web pour interagir avec son cluster Elasticsearch.

Un bon tour d'horizon en français : Au coeur d'ElasticSearch.

Des blogs en anglais qui ont une série d'articles sur le sujet :

Tester ElasticSearch

La configuration de base d'ElasticSearch est faite pour tester rapidement des idées sur un poste de développement. Par exemple, la série de commandes ci-dessous a été faite sur un petit netbook.

Télécharger l'archive

$ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.0.tar.gz
$ tar xvf elasticsearch-0.90.0.tar.gz

Lancer Elasticsearch

$ cd elasticsearch-0.90.0
$ bin/elasticsearh -f
$ curl -XGET localhost:9200
{
        "ok" : true,
        "status" : 200,
        "name" : "Wreckage",
        "version" : {
            "number" : "0.90.0",
            "snapshot_build" : false
        },
        "tagline" : "You Know, for Search"
}

Indexer

$ curl -XPOST localhost:9200/test/phrases/1 -d '{"text": "Liberté, Egalité, Fraternité"}'
$ curl -XPOST localhost:9200/test/phrases/2 -d '{"text": "La route est longue mais la voie est libre"}'
$ curl -XPOST localhost:9200/test/phrases/3 -d '{"text": "Less is more"}'

Rechercher

$ curl -XPOST localhost:9200/test/phrases/_search?pretty=true -d '{"query": {"match":{"text":"libre"}}}'
    {
      "took" : 13,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
      },
      "hits" : {
        "total" : 1,
        "max_score" : 0.095891505,
        "hits" : [ {
          "_index" : "test",
          "_type" : "phrases",
          "_id" : "2",
          "_score" : 0.095891505, "_source" : {"text": "La route est longue mais la voie est libre"}
        } ]
      }
    }

Nouveautés

La version 0.90.0 est la 18ème version majeure d'Elasticsearch. Depuis la version 0.19, les sorties sont précédées d'une série de BETA et RC.

Les principales nouveautés de cette version sont :

  • Passage en version 4.2 de Lucene qui apporte un certain nombre d'avantages :
    • Les nouveaux codecs sont exposés
    • Les nouveaux algorithmes de pertinences sont exposés, comme bm25 en plus de celui basé sur le TF/IDF (Voir Modèle probabiliste de pertinence)
    • La compression est activée par défaut
  • Nouvel algorithme de routage des shards dans le cluster, moins naïf, il équilibre en prenant en compte l’appartenance d'un shard à un index.
  • Une nouvelle API suggest
  • Refactorisation des structures chargeant les champs en mémoire pour un gain en mémoire important.
  • Possibilité de recalculer les scores les n top documents, permettant d'utiliser des algorithmes trop coûteux pour être appliqués à tous les documents.
  • Possibilité d'aller chercher les termes d'un filtre dans un autre document d'un autre index du cluster

Sources, les release notes :

Mais surtout comme la numérotation l'indique, la prochaine release majeure sera la 1.0 qui apportera un système de sauvegarde/restauration intégré, des facettes moins coûteuses en mémoire, et je suis sûr, bien d'autres choses encore.

Qui utilise Elasticsearch ?

Voici une interview de Shay Banon où il parle (entre autres) de ses clients et de leur usage d'ES : Q&A with Shay Banon: 10 “Bonsai Cool” Things About elasticsearch

Et ci-dessous quelques détails.

foursquare

“Elasticsearch is all about scale for us. At Foursquare, we handle tens of millions of searches across 50 million locations each day. Elasticsearch returns real-time results, which encourages more usage and deeper engagement.”—Andrew Hogue, Head of Search, Foursquare

foursquare now uses Elastic Search

SoundCloud

“SoundCloud is an open platform that reaches over 180 million people, equating to 8% of the entire Internet population, every month. We connect people through sound by making it easy to discover and share audio and music once it has been created. Elasticsearch allows us to provide our engaged community with immediate, relevant results while offering us a continued path for scaling, consistency, and reliability.”—Alexander Grosse, Vice President of Engineering, SoundCloud

Architecture behind our new Search and Explore experience

kiln

“We search 40,000,000,000 (forty billion) lines of code in real-time with Elasticsearch. We haven't seen that kind of scale or performance with any other search solution.”—Kevin Gessner, Kiln Team Lead, Fog Creek Software

Kiln, powered by Elasticsearch

Github

Github est passé de Solr à Elasticsearch en début d'année : A Whole New Code Search. Ils ont eu d'ailleurs quelques problèmes : Recent Code Search Outages. On apprend dans ce second article que Github indexe environ 17 To de code source dans un cluster composé de 8 noeuds clients et de 26 noeuds de stockage, disposant chacun 2 To d'espace disque et utilisant des disques durs SSD.

SaaS

On peut noter deux entreprises qui proposent Elasticsearch comme service (Hosted) :

En vrac

Stockage principal

Comme il est possible de conserver une copie du document envoyé pour être indexé, beaucoup de personnes demandent si on peut utiliser ES comme stockage unique de ses données. Si Shay Banon ne le recommande pas, car pour lui il manque encore un système de sauvegarde/restauration intégré, il a, malgré tout, reporté avoir un client qui stocke 1 Po de donné dans un cluster.

Langage agnostique

Si ES est une grosse machinerie en Java, il est très ouvert vers les autres langages. D'abord, son API RESTfull permet de l'attaquer avec tout langage de programmation qui dispose d'un client HTTP. Ensuite aux différents niveaux où il est possible d'écrire des scripts (scripting), on a le choix entre mvel et java, par défaut ou via plug-in entre groovy, javascript et python.

Humour

Comme vous avez pu le voir au paragraphe Tester Elasticsearch/Lancer Elasticsearch, un GET à la racine du serveur vous accueille avec le slogan :

"You Know, for Search"

Les plus attentifs auront remarqué qu'un nom de node est choisi automatiquement. Celui-ci est extrait d'une liste de 2938 noms de personnage Marvel (voir la liste complète names.txt).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.