php - 带有 Elasticsearch 的 Symfony Ajax 搜索栏
问题描述
我想在我的项目中使用 Elasticsearch。我有以下代码:
搜索控制器
/**
* @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 中进行通配符搜索?
解决方案
Elastichsearch 的查找器默认显示 10 个结果。如果要更改它,则必须将第二个参数添加到具有所需值的 find 方法中。就我而言,我想显示 500 个结果。
$finder = $this->container->get('fos_elastica.finder.app.product');
$products = $finder->find($query, '500');
推荐阅读
- .net - 在 Net.Core 2.1 中使用 SOAP WCF 服务时获取身份验证协商而不是 NTLM
- scala - 如何将多个 Spark 数据帧转换为 Dataset[Map[String, Array]]?
- hibernate - 休眠不生成具有某些列的插入语句
- python-3.x - 聚合物链系统的蒙特卡罗模拟
- reactjs - 如果我想监听元素的 boundingClientRect() 变化,应该在 useEffect 的依赖数组中放入什么?
- c++ - 关于使用传递变量修改类函数调用的初学者问题
- php - 我可以将 domxpath 嵌套类的结果放入带有键 => 值的数组中吗?
- web-scraping - 抓取区分大小写的 URL,但使用 Scrapy 抓取不区分大小写的 URL
- scala - Scala 在 if else 语句中赋值
- r - 对 X 轴值进行排序