ElasticSearch 1.3.0 vient de sortir. Basée sur Lucene 4.9, cette version propose, entre autres, plus de fonctionnalités sur les agrégations, des améliorations de la sécurité et du scripting et plusieurs améliorations sur les performances des index.
Le Dynamic Scripting a été désactivé par défaut dans la version 1.2 pour des raisons de sécurité. Cette fonctionnalité est à présent activée par défaut pour les langages qui sont exécutés dans un bac à sable. Groovy, qui dispose d'un bac à sable, remplace maintenant MVEL comme langage de choix pour le scripting. MVEL est maintenant deprecated et sera supprimé de la version 1.4.
D'autres nouvelles fonctionnalités du Scripting :
- La bibliothèque Lucene Expressions a été intégrée au noyau à titre expérimental. Cette fonctionnalité propose un mécanisme qui permet de compiler des requêtes écrites en JavaScript en bytecode, ce qui permet d'améliorer la vitesse d'exécution. Les premiers benchmarks montrent une vitesse 4 à 6 fois supérieure à un script Groovy. Cette rapidité d'exécution vient néanmoins avec quelques limitations - on peut accéder uniquement aux champs à valeurs numériques, les stored fields ne sont pas disponibles et les champs clairsemés (pour lesquels certains documents ne contiennent pas de valeur) auront une valeur par défaut de 0 ; en outre, cette fonctionnalité peut uniquement être utilisée pour la recherche et non pour la mise à jour de documents.
- Les Scripts (ce qui inclue aussi les Search templates) peuvent à présent être sauvegardés dans l'index .script au lieu d'être sauvegardés dans le répertoire de configuration de chaque noeud. Ceci permet à l'utilisateur de créer ses propres requêtes plus simplement dans la mesure où la mise à jour des scripts et des templates peut être faite simplement à l'aide d'une requête.
Les nouvelles fonctionnalités des agrégations :
- Field Collapsing/Combining - cette fonctionnalité permet de regrouper un ensemble de valeurs en un nombre fixé d'entrées et de supprimer les documents en double.
- Percentile Ranks Aggregation - cette fonctionnalité expérimentale montre le pourcentage des valeurs observées qui sont en dessous d'une certaine valeur.
- Les agrégations geo bounds sur les valeurs de type geo_point (par exemple, les ventes par région plutôt que les ventes pour une unique ville).
- De meilleures performances sur les agrégations pour lesquelles les champs ont des cardinalités élevées.
- collect_mode vous permet de déterminer si les agrégations parentes doivent être résolues avant le calcul des agrégations filles (breadth-first). Dans la plupart des requêtes, la valeur par défaut, depth-first (toutes les branches sont réduites dans une première passe avant d'être résolues) offrira de meilleurs résultats mais pour certains champs pour lesquels beaucoup de valeurs sont uniques et peu de résultats sont demandés, breadth_first sera bien plus efficace.
Il y a par ailleurs beaucoup d'améliorations à la fois au niveau de l'indexation et des I/O. Notamment, Lucene 4.9 amène une meilleure compression qui améliore à la fois l'utilisation de la mémoire et du disque. On peut aussi noter quelques améliorations en matière de résilience.
Cette version vient aussi avec des changements - par exemple, JSONP est à présent désactivé par défaut pour des raisons de sécurité. Vous pouvez vous référer à la release note pour connaître une liste complète des changements.