IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Echanges sur FOS ElasticaBundle


Sujet :

Symfony PHP

  1. #1
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut Echanges sur FOS ElasticaBundle
    Bonjour,

    Je voulais savoir si certains d'entre vous avez travaillé avec FOS elastica Bundle, et si vous me le conseillez.

    A première vue, j'ai trouvé pas mal de choses sympa.
    -> la synchro des champ avec mapping très facile
    ->la possibilité d'obtenir les résultats aussi bien de elastic search(donc juste les champs sélectionnés) ou carrément d'un objet doctrine complet.
    ->la pagination qui fonctionne

    Je n'ai pas réussi a mettre en place des index avec recherche large(par exemple qui retourne quelque chose avec ou sans accent, avec ou sans pluriel, etc...)
    Je n'ai pas non plus réussi à comprendre comment utiliser l'API d'head pour savoir ce qui se cachait en detail dans mon cluster ES.

    je dois encore trouver comme effectuer 2 choses :
    - pousser des mises a jour sur l'index depuis une entité sur une autre. (je veux qu'un ajout de commentaire mette a jour une date sur l'idée parente)
    - ajouter des valeurs qui viennent des clefs étrangères.

    Je le trouve assez sympa parce qu'il me permet d'avoir d'un coté un schéma SQL propre, mais de pouvoir avec un index no-sql bien plus rapide. Ca me permet de bénéficier des avantages du No SQL sans perdre l'intégrité de mes données... un bon compromis je trouve.

    Et vous, quel est votre avis dessus ?

    Perre

  2. #2
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour,

    Je vais faire un petit update, parce que je ne sais pas trop si je pars dans la bonne direction pour tout, donc votre avis est intéressant.

    Pour faire simple, on créé le mapping comme ceci :
    Code config.yml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    fos_elastica:
        indexes:
            app:
                types:
                    user:
                        mappings:
                            username: ~
                            firstName: ~
                            lastName: ~
                            email: ~

    Les champs étant juste des get présent dans l'entité user.

    On peut par exemple ajouter
    qui appellera la méthode getCountIdee()

    C'est ce que j'ai fait pour ma part pour avoir dans mon index des valeurs pré écrites comme : nombre d'idées, date de la dernière idée, etc...

    J'ai donc une méthode comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public function getCountIdee(){
    $idees = $this->getIdees();
    $i = 0;
    foreach($idees as $idee){
    if($idee->getIsActivated()){
    $i++;
    }
    }
    return $i;
    }
    C'est déjà loin d'être idéal pour moi, mais quand on arrive a avoir des méthodes plus complexes, comme récupérer la date maximum, ce qui se fait en une requete SQL super simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MAX(Idee.CreateDate) FROM idee WHERE user_id = "123";
    Devient un truc sacrément peu efficace.

    Est-ce que vous pensez que je peux optimiser ca ? Ou forcer par exemple doctrine a ordonner mes idées d'une certaine manière, a remplir cet array de base avec juste certaines valeurs(celles activées dans ce cas la)

    En outre, je vais stocker bientôt des localisations pour chaque utilisateurs. Comment associer n localisations a mon objet elastic search ?

    Merci,
    Pierre

  3. #3
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Tir à l'aveugle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($idees as $idee) {
        if ($idee->getIsActivated()) {
            $i++;
        }
    }
    Je suis pas fan du tout de ce genre de boucle : je ne connais pas (encore) elastic search ni les implémentations qu'en a fait la communauté Symfony mais j'aurais tendance à dire que :
    - soit tu as la possibilité de faire une requête avec directement la condition "isActivated = true"
    - soit tu as la possibilité d'utiliser quelque chose comme les Criteria de Doctrine, pour pouvoir filtrer une collection selon des critères associés au mapping.

    Pour ce qui est de l'outil en lui même, difficile de te donner plus d'info ou d'avis.

  4. #4
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour,

    Je suis d'accord avec toi que c'est un peu sale...(très même).

    Après, toute l'idée est de calculer en amont, lors de l'écriture les valeurs et non a chaque requête.

    En fait, la boucle est faite sur les commentaires, et chaque idée aura un max de 50-100 commentaires... si on arrive a 1000, ça sera vraiment la pagaille, et ça m'étonnerait. Et 1000 itérations, c'est pas grand chose.(si il ne fait pas 1000 requêtes en base, ce qui est une autre question)

    Pour les localisations, j'aurai le même genre de système, chaque idée aura les localisations de chaque niveaux(pays, région, département, ville, ...) écrit en dur.

    Il va falloir que je vois ce que ca donne en terme de perf tout ca quand même.

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/11/2009, 23h01
  2. Echange des données sur deux bases
    Par vlksoft dans le forum Modélisation
    Réponses: 7
    Dernier message: 29/12/2008, 09h03
  3. Réponses: 0
    Dernier message: 25/10/2008, 02h51
  4. Echange de lien sur la home page
    Par badrel dans le forum Référencement
    Réponses: 4
    Dernier message: 14/02/2008, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo