Bonjour,

Je dois intégrer un système de recherche avec l'outil Elasticsearch :

http://www.noelshack.com/2016-19-1462970906-capture.png

Dans cette page, mon formulaire me permet de rechercher un utilisateur, un point de vente etc.

La requête qui permet de faire ceci (dans le repository) :

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
    public function findActiveUsersByOrganizationQuery($pos, $absent = null, $sourceId = false, $lead = false, $appointment = false, $keywords = null, $sort = array(), $enabled = false)
    {
        if (!is_array($pos)) {
            $pos = array($pos);
        }
 
        $sort = $this->checkSort($sort);
 
        $qb = $this->createQueryBuilder('u')
                ->where('u.organization IN(:pos)')
                ->leftJoin('u.organization', 'p')
                ->setParameter('pos', $pos);
 
        /* SELECT u FROM User u LEFT JOIN u.organization p WHERE u.organization IN(:pos)  */
 
        if ($sourceId === false) {
 
        } elseif (is_null($sourceId)) {
            $qb->leftJoin('u.assignedSources', 's')
                    ->andWhere('s.id IS NULL');
        } else {
            $qb->leftJoin('u.assignedSources', 's')
                    ->andWhere('s.id = :source')
                    ->setParameter('source', $sourceId);
        }
 
        if ($appointment) {
            $qb->andWhere('u.availableForAppointment = :appointment')
                    ->setParameter('appointment', true);
        }
        if ($lead) {
            $qb->andWhere('u.availableForLead = :lead')
                    ->setParameter('lead', true);
        }
 
        if (!is_null($absent)) {
            $qb->andWhere('u.absent = :absent')
                    ->setParameter('absent', $absent);
        }
 
        if (!is_null($keywords)) {
            $qb = $this->addKeywordsSubquery($qb, $keywords);
        }
 
        if (!$enabled) {
            $qb->andWhere('u.enabled = :enabled')
                    ->setParameter('enabled', true);
        }
        $qb->orderBy($sort['sortColumn'], $sort['sortOrder']);
 
        return $qb;
    }
 
    public function findActiveUsersByOrganization($pos, $absent = null, $sourceId = false, $lead = false, $appointment = false, $keywords = null, $sort = array(), $enabled = false)
    {
        return $this->findActiveUsersByOrganizationQuery($pos, $absent, $sourceId, $lead, $appointment, $keywords, $sort, $enabled)->getQuery()->getResult();
    }
Désolé de balancer ce code barbare tel-quel.

Au final je devrais utiliser Elasticsearch au lieu de cette requête c'est bien ça ?

Pour Elasticsearch, j'ai suivi ce tuto : http://afsy.fr/avent/2013/20-elastic...votre-Symfony2

J'ai mis en place les différents Bundle et je les ai ajoutés au Kernel.

Le problème vient lors de l’exécution de cette commande :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
php app/console fos:elastica:populate
Dans ma console, j'ai ce message d'erreur :

Resetting Carvivo

Fatal error: Wrong parameters for Exception([string $exception [, long $code [, Exception $previous = NULL]]]) in C:\wamp\www\carvivocrm\vendor\ruflin\elastica\lib\Elastica\Exception\ResponseException.php on line 34
J'ai configuré mon fichier config.yml comme suit :

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:
        Carvivo:
            types:
                crm_user:
                    mappings:
                        last_name: ~
                    persistence:
                        driver: orm
                        model: Carvivo\CrmBundle\Entity\User
                        finder: ~
                        provider: ~
                        listener: ~
Mais je ne trouve pas la solution à mon problème, je désespère .

Merci pour vos réponses.