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 :

Elasticsearch


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 236
    Par défaut Elasticsearch
    Bonjour,

    Je souhaite intégrer le bundle elastica dans mon projet (bundle qui me permet d'utiliser Elasticsearch dans mon application Symfony).

    J'arrive bien à lancer elasticsearch et indexer mes données pour certaines de mes tables de ma base de donnée avec la commande :

    php app/console fos:elastica:populate
    J'ai ensuite ceci qui s'affiche dans la fenêtre de commande :

    Resetting projet
    0/28 [>---------------------------] 0%
    %message%
    100/100 [============================] 100%
    Populating projet/crm_userRefreshing projet
    Refreshing projet
    La table que je sélectionne dans les paramètres d'elasticsearch (paramètres que je précise dans le fichier config.yml) est petite (http://www.noelshack.com/2016-21-1464168002-capture.png) et s'affihce bien dans la page "http://localhost:9200/projet/crm_user/_search" :

    Les paramètres (config.yml) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    fos_elastica:
        clients:
            default: { host: localhost, port: 9200 }
        serializer:
            callback_class: FOS\ElasticaBundle\Serializer\Callback
            serializer: serializer
        indexes:
            projet:
                types:
                    crm_user:
                        mappings:
                            name: ~
                        persistence:
                            driver: orm
                            model: Projet\CrmBundle\Entity\Address\Country
                            finder: ~
                            provider: ~
                            listener: ~
    J'ai donc bien l'indexation des données qui a été effectué que je peux voir ici http://localhost:9200/projet/crm_user/_search :

    http://www.noelshack.com/2016-21-1464168306-capture.png

    Or ce n'est pas dans cette table que je désire effectuer mon indexation mais dans une table "user" qui comporte beaucoup plus de données :

    Affichage des lignes 0 - 24 (total de 2754, Traitement en 0.0010 sec)
    (données de la table user affiché via l'interface PhpMyAdmin).

    Quand je configure mon fichier config.yml pour qu'il pointe sur cette table et que je lance la commande :

    php app/console fos:elastica:populate
    Dans la fenêtre cmd, la commande reste bloqué à :

    Resetting projet
    J'ai donc créé une base de données qui comporte les mêmes tables que ma base de donnée de mon projet mais dans laquelle chaque table est vide, je créé un nouvel utilisateur et cette fois-ci, la commande fonctionne.

    J'aimerai donc résoudre mon problème sur ma base de donnée de mon projet, lancer la commande
    php app/console fos:elastica:populate
    et que celle-ci index mes données.

    Merci pour vos réponses.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 236
    Par défaut
    J'ai résolu mon problème en ajoutant dans le fichier config.yml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    fos_elastica:
        clients:
            default: { host: localhost, port: 9200 }
        serializer:
            callback_class: FOS\ElasticaBundle\Serializer\Callback
            serializer: serializer
        indexes:
            carvivo:
                client: default
                types:
                    crm_user:
                        serializer:
                            groups: [elastica]
                        mappings:
                            last_name: ~
                        persistence:
                            driver: orm
                            model: Carvivo\CrmBundle\Entity\User\User
                            finder: ~
                            provider: ~
                            listener: ~
    Et dans mon entité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use JMS\Serializer\Annotation as Serializer;
    use Doctrine\ORM\Mapping as ORM;
    Mes pages test ( http://projet.local/app_dev.php/test ) fonctionnent correctement :

    Controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
     
    namespace Projet\CrmBundle\Controller;
     
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
     
    class TestController extends Controller
    {
        /**
         * @Route("/test")
         * @Route("/test/{querystring}", name="demo")
         */
     
        public function indexAction($querystring = "")
        {
            $finder = $this->container->get('fos_elastica.index.carvivo.crm_user');
     
            if (!empty($querystring)) {
                $query = new \Elastica\Query\Bool();
                $fieldQuery = new \Elastica\Query\Match();
                $fieldQuery->setFieldQuery('last_name', $querystring);
                $query->addShould($fieldQuery);
            }
     
            else {
                $query = new \Elastica\Query\MatchAll();
            }
     
            $elasticaQuery = new \Elastica\Query();
            $elasticaQuery->setQuery($query);
     
            $elasticaResultSet = $finder->search($elasticaQuery);
            $users = $elasticaResultSet->getResults();
     
            return $this->render('CarvivoCrmBundle:Default:test.html.twig',
                array('querystring' => $querystring, 'users' => $users));
        }
    }
    Fichier twig :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <form id="search">
        <input type="text" id="query" name="query" value="{{ querystring }}">
        <input type="submit" value="Ok">
    </form>
     
    <ul>
        {% for nom in users %}
            <li>{{ nom.last_name }}</li>
        {% endfor %}
    </ul>
     
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#search").submit(function(event) {
                event.preventDefault();
                window.location = '{{ app.request.getBaseURL() }}' + '/test/' + $('#query').val();
            });
        });
    </script>
    Maintenant il ne faut pas que je créé une nouvelle page comme je l'ai fais mais que j'intègre ce système de recherche dans une page déjà existante (qui comporte déjà une fonction et une vue) :

    Twig :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <div class="data" id="searchForm">
     
        <div class="header icon-search">
            <h3>Recherche</h3>
            {% include 'CarvivoCrmBundle:Common:_showHide.html.twig' %}
        </div>
        <div class="content">
            <div class="block cf">
                <div class="title icon-play">Objet recherché : </div>
                <div class="type radio custom-radio">
                {% for child in form.type %}
                    {% if child.vars.value == searchType %}
                    {{ form_widget(child, {attr : {'checked': 'checked'} }) }}
                    {% else %}
                    {{ form_widget(child) }}
                    {% endif %}
                    {{ form_label(child) }}
                {% endfor %}
     
                {{ form_errors(form.type) }}
                </div>
            </div>
     
            <div class="block cf">
                <div class="title icon-play">Recherche : </div>
                {{ form_widget(form.keywords, {value : app.request.query.get('search')['keywords']|default('')} ) }}
                {{ form_errors(form.keywords) }}
            </div>
     
            <div class="block cf">
                <div class="title icon-play">Recherche avancée : </div>
     
                <div class="start">
                {{ form_label(form.start) }}
                {{ form_widget(form.start, {value : app.request.query.get('search')['start']|default(null)} ) }}
                {{ form_errors(form.start) }}
                </div>
     
                <div class="end">
                {{ form_label(form.end) }}
                {{ form_widget(form.end, {value : app.request.query.get('search')['end']|default(null)} ) }}
                {{ form_errors(form.end) }}
                </div>
     
                {% if is_granted("ROLE_SELLER") or is_granted("ROLE_SALES_MANAGER") %}
                {% do form.pos.setRendered %}
                {% else %}
                <div class="pos">
                    <div class="custom-select">{{ form_widget(form.pos, {value : app.request.query.get('search')['pos']|default(null)} ) }}</div>
                    {{ form_errors(form.pos) }}
                </div>
                {% endif %}
            </div>
     
            <div class="buttons cf">
                {{ form_widget(form.search) }}
            </div>
        </div>
     
    </div>
    Fonction dans le Controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
        /**
         * @Route("/recherche", name="operator_search")
         * @PreAuthorize("hasRole('ROLE_OPERATOR')")
         * @Template()
         */
        public function searchAction()
        {
            $em = $this->getDoctrine()->getManager();
            $request = $this->container->get('request');
            $sortColumn = $request->query->get('sort', '');
            $sortOrder = $request->query->get('orderby', '');
     
            $route = $this->get('crm.route')->getSearchRouteWithParameters($request, 'operator_search', 'search', array('keywords', 'type', 'status', 'pos', 'start', 'end'));
     
            $pos = $this->getUserPosUnderControl();
     
            $searchService = $this->get('crm.search');
            $dateService = $this->get('crm.date');
            $form = $this->createForm(new SearchForm($pos,$searchService->getAllLeadStatus(), true));
     
     
            $formHandler = new SearchFormHandler($em, $form, $request, 'operator', $searchService, $dateService, $pos);
            $process = $formHandler->process();
     
            $paginator  = $this->get('knp_paginator');
            $pagination = $paginator->paginate(
                    $process['results'],
                    $this->get('request')->query->get('page', 1)/*page number*/,
                    $this->container->getParameter('pagination.nb_per_page')/*limit per page*/
            );
     
            return array(
                'form' => $form->createView(),
                'searchType' => $process['type'],
                'nb' => $process['nb'],
                'pagination' => $pagination,
                'route' => $route,
                'sortColumn' => $sortColumn,
                'sortOrder' => $sortOrder,
            );
        }
    Le service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public function searchUsers($pos = null, $limit = null, $sort = array(), $keywords = null, $enabled = true)
        {
            return $this->em->getRepository('Carvivo\CrmBundle\Entity\User\User')->findActiveUsersByOrganization($pos, null, false, false, false, $keywords, $sort, $enabled);
        }
    J'ai pas d'idées pour intégrer la fonction de ma page test dans le projet.

    Merci à vous

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 236
    Par défaut

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 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