public function searchAdvanced(AdvancedSearch $advancedSearch) { if (!$advancedSearch->innerObjectIsDefine()) { $match = new \Elastica\Query\MatchAll(); } else { $match = new \Elastica\Query\BoolQuery(); if ($advancedSearch->getMarque()) { $match->addMust(new \Elastica\Query\Match('modeleMarque.marque.id', $advancedSearch->getMarque())); } if ($advancedSearch->getModele()) { $match->addMust(new \Elastica\Query\Match('modeleMarque.modele.id', $advancedSearch->getModele())); } if ($advancedSearch->getBoitier()) { $match->addMust(new \Elastica\Query\Match('boitier.id', $advancedSearch->getBoitier())); } if ($advancedSearch->getCarburant()) { $match->addMust(new \Elastica\Query\Match('carburant.id', $advancedSearch->getCarburant())); } } $boolFilter = new \Elastica\Filter\BoolFilter(); if ($advancedSearch->getPrixMin()) { $boolFilter->addMust(new \Elastica\Filter\Range('prix', array('gte' => intval($advancedSearch->getPrixMin())))); } if ($advancedSearch->getPrixMax()) { $boolFilter->addMust(new \Elastica\Filter\Range('prix', array('lte' => $advancedSearch->getPrixMax()))); } if ($advancedSearch->getKmMin()) { $boolFilter->addMust(new \Elastica\Filter\Range('kmParcouru', array('gte' => intval($advancedSearch->getKmMin())))); } if ($advancedSearch->getKmMax()) { $boolFilter->addMust(new \Elastica\Filter\Range('kmParcouru', array('lte' => $advancedSearch->getKmMax()))); } $filtered = new \Elastica\Query\Filtered($match, $boolFilter); $query = \Elastica\Query::create($filtered); return $this->find($query); }