New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Recherche via Elasticsearch #4096

Merged
merged 110 commits into from Feb 5, 2017

Conversation

@pierre-24
Member

pierre-24 commented Dec 24, 2016

Q R
Type de modification évolution
Ticket(s) (issue(s)) concerné(s) #4133 #3833 #3748 #3725 #3678 #3625 #3549 #3386 #3393 #3310 #2769 #2857 #1755

Joyeux noël, zeste de savoir ! Ça fait 2 mois que je me suis proposé, mais cette fois-ci, c'est officiel, je m'y attaque. But du jeu : virer Solr et utiliser elasticsearch !

Pourquoi ?

  • Possibilité de booster des champs ou des types de document ;
  • Possibilité d'utiliser des analyzer et des tokenizer particulièrement puissants ;
  • Possibilité d'indexer facilement des classes qui ne sont pas de Django
  • (...)

Comment ?

  • En virant solr et haystack, et en se basant directement sur les API's "bas niveau" et "plus haut niveau" directement écrites en python et maintenues par l'équipe d'elastic itself (ce qui évite d'avoir à attendre la mise à jour, puisque l'API est mise à niveau en même temps que le produit) ;
  • Avec une classe abstraite et des méthodes à surclasser
  • En tapant les différents types dans le même index d'elastisearch (les différents modèles étant différenciés par leur type) afin de pouvoir facilement faire des recherches sur tout les modèles en même temps (même si elastic permet de la recherche multiindex).
  • En implémentant un mécanisme pour ne réindexer que ce qui est vraiment nécessaire (donc juste les données qui ont changé).
  • En tentant d'éviter un maximum les allez-retour entre BDD "traditionnelle" et elastic, au niveau de l'indexation et au niveau de la recherche elle-même (dans l'idéal, la recherche ne devrait faire aucun appel à la BDD, juste à elastic, quitte à stocker des infos supplémentaires dans elastic avec index="not_analyzed").
  • En indexant enfin de manière correcte les contenus, sans devoir repasser par la BDD.

Je tiens à créditer le package django-el pour certaines des idées et manières de faire.

TODO

Pour le moment, j'ai fait comme avec la ZEP-12, je travaille sur zds/searchv2/ pour éviter les rebases trop chiants (même si il y en aura).

  • les mixins
  • le mécanisme de flagging
  • les commandes d'indexations
  • Insérer les différents types
  • le modèle et la vue de recherche (en combinant les dizaines de champs à considérer)
  • boosting
  • highlighting
  • utiliser le logger au lieu de print()
  • Gérer le cas des suppressions (en particulier des PublishedContent, qui doivent être modifié convenablement quand ils sont mis à jour)
  • définitivement virer solr et haystack (donc mapper la recherche sur le nouveau module)
  • la documentation (utilisateur et code!)
  • un minimum de tests unitaires (dans la mesure du possible)
  • pip freeze (et d'ici là, ce sera probablement plus la 5.1.1).
  • déjà virer le dossier zds/search/ ?
  • Le update.md
  • Attendre la ZEP-13.

À discuter → #4098

  • Qu'est ce qu'on indexe comme modèle ?
  • Qu'est ce qu'on indexe comme champ pour chacun de ces modèles ?
  • Qu'est ce qu'on booste comment ?
  • Qu'est ce qu'on utilise comme tokenizer et analyzer ?
  • Est ce qu'on en profite pour modifier le front de la recherche ?
  • Est ce que si tout fonctionne, on peut récupérer la barre en page d’accueil (quitte à tuner le comportement pour favoriser la recherche par mots-clés).

Sujet sur le forum à venir, probablement demain, sauf si @vhf préfère pas.

QA

C'est à peu près OK, mais il faudra tester sur le "vrai zds" pour ajuster les différents paramètres de boost.

  • Téléchargez et installez Elasticsearch grâce à la procédure décrite dans la documentation.
  • Mettez à jour vos requirements et vos migrations
  • Indexez à l'aide de python ./manage.py es_manager index-all. Une fois que c'est fait, vous pouvez vous amuser à créer des topics, posts ou publier des contenus et utiliser python ./manage.py es_manager index-flagged pour mettre à jour l'index.
  • Vous pouvez faire une recherche via la page d’accueil ou l'en-tête du site.
  • Vous pouvez ensuite jouer avec les différents paramètres de boost pour voir comment ça influe sur la recherche :)

Un peu de screenshots:

screenshot from 2017-01-02 14 54 28

screenshot from 2017-01-02 14 49 35

@Anto59290

This comment has been minimized.

Show comment
Hide comment
@Anto59290

Anto59290 Dec 24, 2016

Contributor

Salut Pierre,

C'est surement pas la priorité mais tu peux noter ça dans quel modèle indexer : #2807.

Contributor

Anto59290 commented Dec 24, 2016

Salut Pierre,

C'est surement pas la priorité mais tu peux noter ça dans quel modèle indexer : #2807.

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Dec 24, 2016

Member

C'est noté ;)

Member

pierre-24 commented Dec 24, 2016

C'est noté ;)

Show outdated Hide outdated zds/forum/migrations/0011_auto_20161224_1310.py
Show outdated Hide outdated zds/search2/models.py
Show outdated Hide outdated zds/search2/management/commands/es_manager.py
Show outdated Hide outdated zds/search2/models.py
Show outdated Hide outdated zds/search2/models.py
Show outdated Hide outdated zds/search2/models.py
Show outdated Hide outdated zds/search2/models.py
Show outdated Hide outdated zds/search2/models.py
@Anto59290

This comment has been minimized.

Show comment
Hide comment
@Anto59290

Anto59290 Dec 24, 2016

Contributor

Petite question : comment vas-tu gérer les topics/forums privés dans la recherche. Ne pas les indexer du tout ? Ou alors les indexer et choisir de les afficher en fonction de l'utilisateur (staff ou non) ? J'imagine que ça va peut être t'obliger à indexer des champs supplémentaires ?

Contributor

Anto59290 commented Dec 24, 2016

Petite question : comment vas-tu gérer les topics/forums privés dans la recherche. Ne pas les indexer du tout ? Ou alors les indexer et choisir de les afficher en fonction de l'utilisateur (staff ou non) ? J'imagine que ça va peut être t'obliger à indexer des champs supplémentaires ?

@SpaceFox

This comment has been minimized.

Show comment
Hide comment
@SpaceFox

SpaceFox Dec 24, 2016

Member
Member

SpaceFox commented Dec 24, 2016

@artragis

This comment has been minimized.

Show comment
Hide comment
@artragis

artragis Dec 24, 2016

Contributor
Contributor

artragis commented Dec 24, 2016

@artragis

This comment has been minimized.

Show comment
Hide comment
@artragis

artragis Dec 24, 2016

Contributor

attention ceci est une réflexion à chaud d'une perssonne qui n'a pas l'expérience ou l'expertise nécessaire dans elasticsearch.

Pour ce qui est des tokenizers : il me semble que @cgabard a rendu le moteur de markdown capable de gérer un AST ou du moins de générer des méta info bien sympa. On pourrait donc wrapper ce système dans un adaptateur qui permettrait de générer un tokenizing intéressant qui boosterait les mot en fonctions de :

  • est-ce dans le titre principal (s'applique à : contenu, partie, chapitre, extrait, topic)
  • est-ce dans un titre textuel (élément qui commence par # ou ## => plus il y a de # plus la priorité est faible)
  • est-ce un paragraphe/le titre d'un tableau/d'une figure
Contributor

artragis commented Dec 24, 2016

attention ceci est une réflexion à chaud d'une perssonne qui n'a pas l'expérience ou l'expertise nécessaire dans elasticsearch.

Pour ce qui est des tokenizers : il me semble que @cgabard a rendu le moteur de markdown capable de gérer un AST ou du moins de générer des méta info bien sympa. On pourrait donc wrapper ce système dans un adaptateur qui permettrait de générer un tokenizing intéressant qui boosterait les mot en fonctions de :

  • est-ce dans le titre principal (s'applique à : contenu, partie, chapitre, extrait, topic)
  • est-ce dans un titre textuel (élément qui commence par # ou ## => plus il y a de # plus la priorité est faible)
  • est-ce un paragraphe/le titre d'un tableau/d'une figure
@vhf

This comment has been minimized.

Show comment
Hide comment
@vhf

vhf Dec 24, 2016

Member

Faisable, mais je propose qu'on s'y penche dans un 2e temps. 👍

Member

vhf commented Dec 24, 2016

Faisable, mais je propose qu'on s'y penche dans un 2e temps. 👍

@artragis

This comment has been minimized.

Show comment
Hide comment
@artragis

artragis Dec 24, 2016

Contributor
Contributor

artragis commented Dec 24, 2016

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Dec 25, 2016

Member

Petite question : comment vas-tu gérer les topics/forums privés dans la recherche. Ne pas les indexer du tout ? Ou alors les indexer et choisir de les afficher en fonction de l'utilisateur (staff ou non) ? J'imagine que ça va peut être t'obliger à indexer des champs supplémentaires ?

Je vais dans le sens des réponses de @SpaceFox et @artragis , tout dois être indexé. Mais comme je dis, faut que je lance un topic avec une réflexion globale sur le sujet :)

Member

pierre-24 commented Dec 25, 2016

Petite question : comment vas-tu gérer les topics/forums privés dans la recherche. Ne pas les indexer du tout ? Ou alors les indexer et choisir de les afficher en fonction de l'utilisateur (staff ou non) ? J'imagine que ça va peut être t'obliger à indexer des champs supplémentaires ?

Je vais dans le sens des réponses de @SpaceFox et @artragis , tout dois être indexé. Mais comme je dis, faut que je lance un topic avec une réflexion globale sur le sujet :)

@vhf

This comment has been minimized.

Show comment
Hide comment
@vhf

vhf Dec 25, 2016

Member

A choisir, je préfère qu'on ouvre une issue pour discuter de ça plutôt qu'un topic, ça permet d'avoir un lien entre la PR, le repo et la discussion justifiant les choix qu'on fera. :)

Member

vhf commented Dec 25, 2016

A choisir, je préfère qu'on ouvre une issue pour discuter de ça plutôt qu'un topic, ça permet d'avoir un lien entre la PR, le repo et la discussion justifiant les choix qu'on fera. :)

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Dec 25, 2016

Member

M'en doutais que t'allais dire ça :p

Je le fais, parce que j'ai envie d’essayer, mais je trouve que la question "qu'est ce que vous voulez comme résultat d'une recherche" (sans les détails techniques) devrait également être posée sur le forum. @FanJiyong , je te laisse décider de ça :-)

GO #4098 !!

Member

pierre-24 commented Dec 25, 2016

M'en doutais que t'allais dire ça :p

Je le fais, parce que j'ai envie d’essayer, mais je trouve que la question "qu'est ce que vous voulez comme résultat d'une recherche" (sans les détails techniques) devrait également être posée sur le forum. @FanJiyong , je te laisse décider de ça :-)

GO #4098 !!

@artragis

This comment has been minimized.

Show comment
Hide comment
@artragis

artragis Dec 28, 2016

Contributor
Contributor

artragis commented Dec 28, 2016

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Dec 29, 2016

Member

Bon, ça avance. Cette fois, on peut commencer à exploiter ES pour chercher ... N'importe comment puisque c'est pas boosté. Mais on peut :)

Member

pierre-24 commented Dec 29, 2016

Bon, ça avance. Cette fois, on peut commencer à exploiter ES pour chercher ... N'importe comment puisque c'est pas boosté. Mais on peut :)

pierre-24 added some commits Dec 29, 2016

Improve stuffs:
- Add fields
- Format search items (including date)
- Remove forums into which the user is not supposed to go
@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 1, 2017

Member

@vhf me l'as très gentiment fourni, c'est pour ça que je sais que ça correspond à ce tuto là, mais très vite fait, je vois pas l'erreur (y'a rien de mauvais dans le JSON à priori). Je tente en important le tuto en local.

Member

pierre-24 commented Feb 1, 2017

@vhf me l'as très gentiment fourni, c'est pour ça que je sais que ça correspond à ce tuto là, mais très vite fait, je vois pas l'erreur (y'a rien de mauvais dans le JSON à priori). Je tente en important le tuto en local.

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 1, 2017

Member

J'ai peut-être quelque chose:

      {
        "_index": "zds_search",
        "_type": "publishedcontent",
        "_id": "263",
        "_score": 20.60248,
        "_source": {
          "get_absolute_url_online": "/tutoriels/334/panda3d-et-heightmap/",
          "description": "Genèse d'un terrain : d'une HeightMap au rendu en temps réel",
          "tags": [
            "python",
            "graphisme 3d"
          ],
          "text": **trop_de_trucs**,
          "title": "Panda3D et HeightMap",
          "content_type": "TUTORIAL",
          "publication_date": null,
          "content_pk": 334,
          "thumbnail": "/media/galleries/899/bfe4ef23-bca2-43a5-b401-401a27b4fde9.png.96x96_q95_crop.png",
          "categories": [
            "Informatique",
            "Arts, graphisme et multimédia",
            "Programmation et algorithmique",
            "Autres"
          ]
        }
      },

En local, le code aprécie middle le "publication_date": null. Chaipas trop pourquoi en bêta ça passe quand même sans erreurs, mais toujours est-il que c'est pas le comportement attendu :)


En local, j'ai fait,

{
  "_index": "zds_search",
  "_type": "publishedcontent",
  "_id": "2",
  "_version": 3,
  "found": true,
  "_source": {
    "get_absolute_url_online": "/tutoriels/2/panda3d-et-heightmap/",
    "description": "Genèse d'un terrain : d'une HeightMap au rendu en temps réel",
    "tags": [],
    "text": **toujours_trop_de_trucs**,
    "title": "Panda3D et HeightMap",
    "content_type": "TUTORIAL",
    "publication_date": null,
    "content_pk": 2,
    "thumbnail": null,
    "categories": [
      "Autres"
    ]
  }
}

... Et je me fais bien entendu jeter par une erreur dans le template quand il essaye de parser la date.

Member

pierre-24 commented Feb 1, 2017

J'ai peut-être quelque chose:

      {
        "_index": "zds_search",
        "_type": "publishedcontent",
        "_id": "263",
        "_score": 20.60248,
        "_source": {
          "get_absolute_url_online": "/tutoriels/334/panda3d-et-heightmap/",
          "description": "Genèse d'un terrain : d'une HeightMap au rendu en temps réel",
          "tags": [
            "python",
            "graphisme 3d"
          ],
          "text": **trop_de_trucs**,
          "title": "Panda3D et HeightMap",
          "content_type": "TUTORIAL",
          "publication_date": null,
          "content_pk": 334,
          "thumbnail": "/media/galleries/899/bfe4ef23-bca2-43a5-b401-401a27b4fde9.png.96x96_q95_crop.png",
          "categories": [
            "Informatique",
            "Arts, graphisme et multimédia",
            "Programmation et algorithmique",
            "Autres"
          ]
        }
      },

En local, le code aprécie middle le "publication_date": null. Chaipas trop pourquoi en bêta ça passe quand même sans erreurs, mais toujours est-il que c'est pas le comportement attendu :)


En local, j'ai fait,

{
  "_index": "zds_search",
  "_type": "publishedcontent",
  "_id": "2",
  "_version": 3,
  "found": true,
  "_source": {
    "get_absolute_url_online": "/tutoriels/2/panda3d-et-heightmap/",
    "description": "Genèse d'un terrain : d'une HeightMap au rendu en temps réel",
    "tags": [],
    "text": **toujours_trop_de_trucs**,
    "title": "Panda3D et HeightMap",
    "content_type": "TUTORIAL",
    "publication_date": null,
    "content_pk": 2,
    "thumbnail": null,
    "categories": [
      "Autres"
    ]
  }
}

... Et je me fais bien entendu jeter par une erreur dans le template quand il essaye de parser la date.

@DevHugo

This comment has been minimized.

Show comment
Hide comment
@DevHugo

DevHugo Feb 1, 2017

Contributor

ouai mais sur la beta, les erreurs dans les templates sont pas affiché, il me semble.

Bizarre, cette histoire de publication_date à null.

Contributor

DevHugo commented Feb 1, 2017

ouai mais sur la beta, les erreurs dans les templates sont pas affiché, il me semble.

Bizarre, cette histoire de publication_date à null.

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 1, 2017

Member

Donc c'est probablement ça. Je vais mettre un pubdate if pubdate else update_date qui va bien là ou il faut :)

Member

pierre-24 commented Feb 1, 2017

Donc c'est probablement ça. Je vais mettre un pubdate if pubdate else update_date qui va bien là ou il faut :)

@DevHugo

This comment has been minimized.

Show comment
Hide comment
@DevHugo

DevHugo Feb 1, 2017

Contributor

Ça serait bien de comprendre pourquoi la pubdate est à null. C'est pas normal.

Contributor

DevHugo commented Feb 1, 2017

Ça serait bien de comprendre pourquoi la pubdate est à null. C'est pas normal.

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 1, 2017

Member

Ça serait bien de comprendre pourquoi la pubdate est à null. C'est pas normal.

À force de migrer (avec la ZEP-12 et tout ça), je pense que tout doit pas être nickel partout. C'est limite étonnant que ça tienne le coup ailleurs :p

Member

pierre-24 commented Feb 1, 2017

Ça serait bien de comprendre pourquoi la pubdate est à null. C'est pas normal.

À force de migrer (avec la ZEP-12 et tout ça), je pense que tout doit pas être nickel partout. C'est limite étonnant que ça tienne le coup ailleurs :p

@DevHugo

This comment has been minimized.

Show comment
Hide comment
@DevHugo

DevHugo Feb 1, 2017

Contributor

Mouai, ça vaut peut-être le coup de faire une requête sql sur la prod pour vérifier que tout est ok.

Contributor

DevHugo commented Feb 1, 2017

Mouai, ça vaut peut-être le coup de faire une requête sql sur la prod pour vérifier que tout est ok.

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 1, 2017

Member

De fait. Puis je dis ça, mais ça a l'air d'être un tuto post zep-12.

@vhf ? C'est tutorialv2_publishedcontent et c'est bien le champ publication_date qui devrait idéalement pas être à NULL.

Member

pierre-24 commented Feb 1, 2017

De fait. Puis je dis ça, mais ça a l'air d'être un tuto post zep-12.

@vhf ? C'est tutorialv2_publishedcontent et c'est bien le champ publication_date qui devrait idéalement pas être à NULL.

@vhf

This comment has been minimized.

Show comment
Hide comment
@vhf

vhf Feb 1, 2017

Member
>>> from zds.tutorialv2.models.models_database import PublishedContent
>>> PublishedContent.objects.filter(publication_date=None).count()
210
>>> PublishedContent.objects.filter(publication_date=None, update_date=None).count()
209
>>> PublishedContent.objects.filter(publication_date=None, must_redirect=False).count()
1
>>> PublishedContent.objects.filter(publication_date=None, must_redirect=False)
[<PublishedContent: Version publique de "Panda3D et HeightMap">]
>>> PublishedContent.objects.filter(publication_date=None, must_redirect=False).first().content_pk
334L
>>> PublishedContent.objects.filter(content_pk=334)
[<PublishedContent: Version publique de "Panda3D et HeightMap">]
Member

vhf commented Feb 1, 2017

>>> from zds.tutorialv2.models.models_database import PublishedContent
>>> PublishedContent.objects.filter(publication_date=None).count()
210
>>> PublishedContent.objects.filter(publication_date=None, update_date=None).count()
209
>>> PublishedContent.objects.filter(publication_date=None, must_redirect=False).count()
1
>>> PublishedContent.objects.filter(publication_date=None, must_redirect=False)
[<PublishedContent: Version publique de "Panda3D et HeightMap">]
>>> PublishedContent.objects.filter(publication_date=None, must_redirect=False).first().content_pk
334L
>>> PublishedContent.objects.filter(content_pk=334)
[<PublishedContent: Version publique de "Panda3D et HeightMap">]
@DevHugo

This comment has been minimized.

Show comment
Hide comment
@DevHugo

DevHugo Feb 1, 2017

Contributor

C'est sur la prod ou la béta ?

Contributor

DevHugo commented Feb 1, 2017

C'est sur la prod ou la béta ?

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 1, 2017

Member

Il est tout à fait probable que ce bug soit en cause de la correction effectuée ici. En tout ca, ça ressemble furieusement à ça (comprendre que c'est plus censé se reproduire)

Member

pierre-24 commented Feb 1, 2017

Il est tout à fait probable que ce bug soit en cause de la correction effectuée ici. En tout ca, ça ressemble furieusement à ça (comprendre que c'est plus censé se reproduire)

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 1, 2017

Member

Ou bien celui là.

Member

pierre-24 commented Feb 1, 2017

Ou bien celui là.

@vhf

This comment has been minimized.

Show comment
Hide comment
@vhf

vhf Feb 4, 2017

Member

@pierre-24 peux-tu stp me résumer la situation ? Dans l'idéal, j'aimerais que ce soit mergé mercredi au plus tard, si possible avant mercredi.

En l'état j'arrive pas à déterminer si c'est mergeable ou pas (problème de migrations/travis mis à part).

Member

vhf commented Feb 4, 2017

@pierre-24 peux-tu stp me résumer la situation ? Dans l'idéal, j'aimerais que ce soit mergé mercredi au plus tard, si possible avant mercredi.

En l'état j'arrive pas à déterminer si c'est mergeable ou pas (problème de migrations/travis mis à part).

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 4, 2017

Member
Member

pierre-24 commented Feb 4, 2017

@vhf

This comment has been minimized.

Show comment
Hide comment
@vhf

vhf Feb 4, 2017

Member

Super, merci @pierre-24 . Du coup il manque plus que les tests passent sur cette PR et quand c'est vert, on mergera.

Member

vhf commented Feb 4, 2017

Super, merci @pierre-24 . Du coup il manque plus que les tests passent sur cette PR et quand c'est vert, on mergera.

@DevHugo

This comment has been minimized.

Show comment
Hide comment
@DevHugo

DevHugo Feb 4, 2017

Contributor

C'est un souci de migration:

CommandError: Conflicting migrations detected (0016_auto_20170108_1148, 0016_auto_20170201_1940 in tutorialv2; 0011_auto_20170130_1823, 0011_auto_20161224_1310 in forum).
To fix them run 'python manage.py makemigrations --merge'

Contributor

DevHugo commented Feb 4, 2017

C'est un souci de migration:

CommandError: Conflicting migrations detected (0016_auto_20170108_1148, 0016_auto_20170201_1940 in tutorialv2; 0011_auto_20170130_1823, 0011_auto_20161224_1310 in forum).
To fix them run 'python manage.py makemigrations --merge'

@gcodeur gcodeur referenced this pull request Feb 4, 2017

Closed

Passage à Solr 5 #2802

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 4, 2017

Member
Member

pierre-24 commented Feb 4, 2017

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 4, 2017

Member

Voilà, j'ai réglé les souchis de migration, j'ai intégré dev et j'ai mis à jour sur les dernières versions des librairies.Tout est bon, normalement :)

Member

pierre-24 commented Feb 4, 2017

Voilà, j'ai réglé les souchis de migration, j'ai intégré dev et j'ai mis à jour sur les dernières versions des librairies.Tout est bon, normalement :)

@coveralls

This comment has been minimized.

Show comment
Hide comment
@coveralls

coveralls Feb 4, 2017

Coverage Status

Coverage increased (+1.4%) to 88.363% when pulling c03dca7 on pierre-24:add_elasticsearch into f4d041b on zestedesavoir:dev.

coveralls commented Feb 4, 2017

Coverage Status

Coverage increased (+1.4%) to 88.363% when pulling c03dca7 on pierre-24:add_elasticsearch into f4d041b on zestedesavoir:dev.

@DevHugo

This comment has been minimized.

Show comment
Hide comment
@DevHugo

DevHugo Feb 5, 2017

Contributor

@vhf Pour moi, on est bon ! J'ai plus aucune remarque. Je te laisse appuyer sur le bouton final ?

Contributor

DevHugo commented Feb 5, 2017

@vhf Pour moi, on est bon ! J'ai plus aucune remarque. Je te laisse appuyer sur le bouton final ?

@vhf

This comment has been minimized.

Show comment
Hide comment
@vhf

vhf Feb 5, 2017

Member

Super, merci !

Member

vhf commented Feb 5, 2017

Super, merci !

@vhf vhf merged commit 807fa2d into zestedesavoir:dev Feb 5, 2017

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details
@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 5, 2017

Member
Member

pierre-24 commented Feb 5, 2017

@vhf

This comment has been minimized.

Show comment
Hide comment
@vhf

vhf Feb 5, 2017

Member

Yep, une affaire rondement menée, bravo à tous !

Member

vhf commented Feb 5, 2017

Yep, une affaire rondement menée, bravo à tous !

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 5, 2017

Member
Member

pierre-24 commented Feb 5, 2017

@Situphen

This comment has been minimized.

Show comment
Hide comment
@Situphen

Situphen Feb 5, 2017

Contributor

@pierre-24 dans un peu plus d'un mois alors xD y'aura juste un petit problème de distance :-°

Contributor

Situphen commented Feb 5, 2017

@pierre-24 dans un peu plus d'un mois alors xD y'aura juste un petit problème de distance :-°

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 5, 2017

Member
Member

pierre-24 commented Feb 5, 2017

@Situphen

This comment has been minimized.

Show comment
Hide comment
@Situphen

Situphen Feb 5, 2017

Contributor

Nan mais oh ! Je suis breton moi ! :P

Contributor

Situphen commented Feb 5, 2017

Nan mais oh ! Je suis breton moi ! :P

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Feb 5, 2017

Member
Member

pierre-24 commented Feb 5, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment