<?php
namespace App\Service\Search;
use Elastica\Query;
use Elastica\Query\Match;
use Elastica\Query\MatchQuery;
use Symfony\Component\HttpFoundation\Request;
use FOS\ElasticaBundle\Finder\FinderInterface;
use PhpParser\Node\Expr\Match_;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Contracts\Translation\TranslatorInterface; // Для получения текущего языка
/** @package App\Service\Search */
class SearchProd
{
public function __construct(private FinderInterface $finder, private TranslatorInterface $translator)
{
}
public function search(string $lang, string $query): array
{
$prod_ids = [];
if ($query) {
// Определяем поле для поиска в зависимости от текущей локали
$searchField = 'name_' . $lang;
// Создаем Elastica Query
$elasticaQuery = new MatchQuery();
// $elasticaQuery->setField($searchField, $query);
$elasticaQuery->setField($searchField, [
'query' => $query,
'operator' => 'AND',
]);
// $elasticaQuery->setFieldParam($searchField, 'operator', 'AND');
$elasticaQuery = new Query($elasticaQuery);
$elasticaQuery->setSize(1000);
$products = $this->finder->find($elasticaQuery);
foreach ($products as $k => $v) {
$prod_ids[] = $v->getId();
}
}
return $prod_ids;
}
}