Панель поиска Symfony Ajax с Elasticsearch

Я хочу использовать Elasticsearch в своем проекте. У меня есть следующий код:

SearchController

/**
 * @Route("/api/elasticsearch" )
 */
public function viewElasticsearch(Request $request)
{
    $query = $request->get('term');

    if (empty($query)) {
        return new JsonResponse([]);
    }

    if (substr($query, -1) !== '*') {
        $query .= '';
    }

    $finder = $this->container->get('fos_elastica.finder.app.product');
    $products = $finder->find($query);

    foreach ($products as $entity) {
        $result['results'][] = [
            'id' => $entity->getId(),
            'text' => $entity->getName(),
            'sku' => $entity->getSku(),
        ];
    }

    return new JsonResponse($result);
}

Javascript

<script>
    $('.js-data-example-ajax').select2({
        ajax: {
            url: '/product/api/elasticsearch',
            dataType: 'json',
            width: 'resolve', // need to override the changed default
            minimumResultsForSearch: -1,
            dropdownCssClass: 'select2-hidden',
            }
    });
</script>

Если я вызову поисковый запрос через командную строку:

curl -X GET 'http://localhost:9200/app/product/_search?q=*iphone*&size=500'

Я получаю 381 результат поиска выше, но если я выполню тот же поиск в Symfony, я получу 8 результатов. Как я могу выполнить поиск по шаблону в Symfony?

Что покажет dump($query) сразу после того, как вы получите его из запроса? Интересно, это не тот случай, когда запрос urlencoded.

Michał Tomczuk 07.04.2019 16:54

@MichałTomczuk дамп - «Iphone».

Noob 07.04.2019 16:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Искатель Elasticsearch по умолчанию показывает 10 результатов. Если вы хотите изменить его, вам нужно добавить второй параметр в метод поиска с нужным вам значением. В моем случае я хочу показать 500 результатов.

$finder = $this->container->get('fos_elastica.finder.app.product');
$products = $finder->find($query, '500');

Другие вопросы по теме