Share Button

Lire la version française

Elasticsearch is able to index huge sets of data, documents as well as numeric data.
In the versions before the v1.0.0, facets allowed to calculate statistics for a list of indexed documents (tag distribution, mean, standard deviation, …)
Over time, the use of facets evolved. The developers wished to use them to do more and more complex statistics.

To fit this need, the great Elasticsearch team added the implementation of aggregations.
- Metric: sum, minimum, maximum, mean, …
- Buckets : term, date or value distributions (and many others) aggregations can contain sub aggregations. So, we can calculate statistics inside a term distribution, how crazy is that?

The goal of this post is to describe one of the many uses of aggregations : statistics.

Continue reading

Share Button

Share Button

Read the English version

Elasticsearch est capable d’indexer d’énormes volumes de données, aussi bien des documents que des chiffres.
Dans les versions inférieures à la v1.0.0, les facettes permettaient de récupérer des statistiques pour une liste de documents indexés (répartition par tag, moyenne, écart-type,…)
Au fil du temps, l’utilisation de ces facettes a évolué. Les développeurs ont souhaité s’en servir pour réaliser des statistiques de plus en plus poussées.
En réponse à cela, la géniale équipe Elasticsearch a ajouté l’implémentation des agrégations :
- Métriques : Somme, minimum, maximum, moyenne, ….
- “Buckets” : Répartition par terme, par date, par valeur, … Ces agrégations peuvent contenir des sous-agrégations. On peut donc calculer des statistiques dans une répartition par terme, un truc de malade!

Le but de cet article est de décrire une des utilisations qui peuvent être faites de ces agrégations : des statistiques.

Continue reading

Share Button

Share Button

Read the English version

Dans cet article, nous allons trier et paginer notre liste d’articles avec Elasticsearch, Symfony et le WhiteOctoberPageFantaBundle.
C’est la suite de l’article recherche simple avec Elasticsearch, que nous vous recommandons de lire. Cet article part du principe que la recherche est déjà implémentée, et tout le code ne sera pas repris ici.
Paginer avec Symfony est très facile et consiste juste à ajouter des propriétés à notre modèle Search et ajouter le WhiteOctoberPageFantaBundle pour prendre en charge la pagination.

Mettre à jour le modèle

Premièrement, mettons à jour le modèle Search pour ajouter les propriétés qui vont gérer le tri et la pagination (comme dit précédemment, nous ne montrons pas tout le code mais uniquement ce qui change par rapport à l’article précédent. Comme d’habitude, vous pouvez trouver le projet complet sur Github.
Continue reading

Share Button

Share Button

Lire la version française

In this post, we’re going to sort and paginate our articles list with Symfon Elasticsearch and the WhiteOctoberPageFantaBundle. This post follows the post about Indexing and simple search with Elasticsearch and Symfony that you should read. We suppose you have already implemented the search system and all the code will not be shown here.
Paginate with Symfony is as easy as adding some properties to our Search model and ask the WhiteOctoberPageFantaBundle to handle the pagination.

Updating the model

First, let’s update the search model to add some properties to handle the sorting and the pagination (as we said before, we’ll not show the whole code but only the one which has been changed since we wrote the previous post). And as usually, you can find the full project on Github.
Continue reading

Share Button

Share Button

Lire la version française

The XML configuration for FOSElasticaBundle is powerful, but in some cases this is not enough.
In order to solve this, FOS allows you to override the transformation from Doctrine Object to an ElasticSearch Document : ModelToElasticSearchTransformer.

Continue reading

Share Button

Share Button

Lire la version française

When and why hydrating objects thanks to Transformers?

When you use Elasticsearch and the FosElasticaBundle Finders, the responses received from Elasticsearch are automatically transformed into Doctrine objects.

In some cases, you will need to display some information that come from a join : a photo, a category translation, …
Unfortunately, the hydratation is only done on the objects : FosElasticaBundle transforms the ids that match your search into objects via a select * in (:ids).
The consequence is that, for each entry in your results list, Doctrine will make a query for the join object (for example a Category). For 100 results in 100 different categories, 100 simple queries will be done. You understand what can happen with a complex model and several joins.

Fortunately, you can avoid that by overriding the Transformer.
Continue reading

Share Button

Share Button

Read the English version

La configuration XML du FOSElasticaBundle est très performante. Il existe quelques rares cas ou cela ne s’avère pas suffisant.

Pour résoudre ce problème, FOS permet de surcharger la transformation entre un Objet Doctrine (ORM ou ODM) et un Document ElasticSearch : le ModelToElasticaTransformer.

Continue reading

Share Button

Share Button

Lire la version française

In a non relational database system, joins can miss. Fortunately, Elasticsearch provides solutions to meet these needs :

Array Type

Read the doc on elasticsearch.org

As its name suggests, it can be an array of native types (string, int, …) but also an array of objects (the basis used for “objects” and “nested”).
Continue reading

Share Button

Share Button

Read the English version

Dans un système de données non relationnel, ce qui peut manquer ce sont les jointures.
Heureusement, Elasticsearch propose des solutions pour répondre à différents besoins :

Array Type

Lire l’article sur elasticsearch.org

Comme son nom l’indique : ce peut être un tableau de types natifs (string, int, …) mais aussi d’objets (c’est la base utilisée pour les “objects” et les “nested”).
Continue reading

Share Button

Share Button

Lire la version française

Elasticsearch allows you to make advanced searches. Some users may want to extract their search results to Excel (or LibreOffice Calc…) to work on the data.

As we explained in our post Export data to a csv file with Symfony, the goal of a (successful) export is to limit the effect on the server.

With Elasticsearch, we can use the scan and scroll functions to iterate.

Continue reading

Share Button