ES检索条件是搜索的关键字不为空
1、如果检索条件为空 则从数据库中查询
//接收参数
$keywords = input('keywords');
//如果$keywords为空则从数据库中查询数据
if(empty($keywords)){
//获取指定分类下商品列表
if(!preg_match('/^\d+$/', $id)){
$this->error('参数错误');
}
//查询分类下的商品
$list = \app\common\model\Goods::where('cate_id', $id)->order('id desc')->paginate(10);
$arr['current_page'] = $list->currentPage();//当前页
$arr['prev_page'] = $list->currentPage() -1 <= 1 ? 1 : $list->currentPage()-1;//上一页
$arr['next_page'] = $list->currentPage() +1 >= $list->lastPage() ? $list->lastPage() : $list->currentPage()+1;//下一页
$arr['last_page'] = $list->lastPage();//总页数
$arr['data'] = $list->items();//数据
//查询分类名称
$category_info = \app\common\model\Category::find($id);
$cate_name = $category_info['cate_name'];
//返回页面
return view('index', ['list' => $arr, 'cate_name' => $cate_name]);
}
2、如果检索条件不为空则从ES中搜索
//不为空,则从ES中查询数据
try{
$page = input('page',1);//页码
$size = 10;//每页显示条数
$limit = ($page-1)*$size;//偏移量
$client = ClientBuilder::create()->build();
$params = [
'index' => 'goods',
//'type' => '_doc',
'body' => [
'query' => [
'match' => [
'goods_name' => $keywords
]
],
'highlight' => [
'pre_tags' => ["<span style='color: red'>"],
'post_tags' => ["</span>"],
'fields' => [
"goods_name" => new \stdClass()
]
]
]
];
//每页显示条数
$params["size"] = $size;
//偏移量
$params["from"] = $limit;
//执行搜索
$results = $client->search($params);
//循环处理数据,将高亮显示的goods_name替换原数据
foreach ($results['hits']['hits'] as $k => $v){
$results['hits']['hits'][$k]['_source']['goods_name'] = $v['highlight']['goods_name'][0];
}
//从二维数组中取出一列
$list = array_column($results['hits']['hits'], '_source');
$arr['current_page'] = $page;//当前页
$last_page = ceil($results['hits']['total']['value']/$size);//总页数
$arr['last_page'] = $last_page;
$arr['prev_page'] = $page -1 <= 1 ? 1 : $page - 1;//上一页
$arr['next_page'] = $page +1 >= $last_page ? $last_page : $page+1;//下一页
$arr['data'] = $list;//展示的数据
$cate_name = $keywords;
//返回页面
return view('index', ['list' => $arr, 'cate_name' => $cate_name]);
3、前端分页实现(使用内置循环标签{for}{/for})
<div class="fr page">
<div class="sui-pagination pagination-large">
<a href=" ?page=1&keywords={$Request.get.keywords}">首页</a>
<a href=" ?page={$list.prev_page}&keywords={$Request.get.keywords}">上一页</a>
{for start="1" end="$list.last_page+1"}
<a href=" ?page={$i}&keywords={$Request.get.keywords}">第{$i}页</a>
{/for}
<a href=" ?page={$list.next_page}&keywords={$Request.get.keywords}">下一页</a>
<a href=" ?page={$list.last_page}&keywords={$Request.get.keywords}">尾页</a>
</div>
</div>
4、效果图
(检索条件为空)
(检索条件不为空)