src/Service/Search/SearchProd.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Service\Search;
  3. use Elastica\Query;
  4. use Elastica\Query\Match;
  5. use Elastica\Query\MatchQuery;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use FOS\ElasticaBundle\Finder\FinderInterface;
  8. use PhpParser\Node\Expr\Match_;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Contracts\Translation\TranslatorInterface// Для получения текущего языка
  13. /** @package App\Service\Search */
  14. class SearchProd
  15. {
  16.     public function __construct(private FinderInterface $finder, private TranslatorInterface $translator)
  17.     {        
  18.     }
  19.     public function search(string $langstring $query): array
  20.     {
  21.         $prod_ids = [];
  22.         if ($query) {
  23.             // Определяем поле для поиска в зависимости от текущей локали
  24.             $searchField 'name_' $lang;
  25.             
  26.             // Создаем Elastica Query
  27.             $elasticaQuery = new MatchQuery();
  28.             // $elasticaQuery->setField($searchField, $query);
  29.             $elasticaQuery->setField($searchField, [
  30.                 'query'    => $query,
  31.                 'operator' => 'AND',
  32.             ]);
  33.             // $elasticaQuery->setFieldParam($searchField, 'operator', 'AND');
  34.             
  35.             $elasticaQuery = new Query($elasticaQuery);
  36.             $elasticaQuery->setSize(1000);
  37.             $products $this->finder->find($elasticaQuery);
  38.             foreach ($products as $k => $v) {
  39.                 $prod_ids[] = $v->getId();
  40.             }            
  41.         }
  42.         
  43.         return $prod_ids;        
  44.     }
  45. }