Я хочу использовать 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?
@MichałTomczuk дамп - «Iphone».
Искатель Elasticsearch по умолчанию показывает 10 результатов. Если вы хотите изменить его, вам нужно добавить второй параметр в метод поиска с нужным вам значением. В моем случае я хочу показать 500 результатов.
$finder = $this->container->get('fos_elastica.finder.app.product');
$products = $finder->find($query, '500');
Что покажет
dump($query)
сразу после того, как вы получите его из запроса? Интересно, это не тот случай, когда запрос urlencoded.