使用Elasticsearch搜索引擎,配置ik中文分词,与Laravel模型关联,然后实现搜索的业务逻辑。本篇是结束篇,使用Laravel的Scout扩展包完成搜索功能
续上篇,已经安装和配置好了Scout和支持Elastic的扩展包
编辑Article模型,将LaravelScoutSearchable 这个 trait加到你想要做检索的模型,这个trait会注册一个模型观察者来保持模型同步到检索服务的驱动:
$this->id,
'title' => $this->title,
'content' => $this->content
];
}
//...
}
使用aritsan命令,从mysql导入现有数据到ElasticSearch
php artisan scout:import
查看一下ElasticSearch中是否存在配置的索引,和导入的数据大小
curl 'localhost:9200/_cat/indices?v'
ElasticSearch的一些RESTful api调用方式,可以用来测试数据
查看索引的配置
curl -XGET "http://localhost:9200/mi360?pretty=true"
查看文档列表
curl -XGET "http://localhost:9200/mi360/_search?pretty=true"
查看指定id=10的文档
curl -XGET "http://localhost:9200/mi360/article/10?pretty=true"
ok!导入成功后,开始写搜索业务逻辑了
添加路由
Route::get('/search', 'WelcomeController@search');
编辑视图文件中的form表单,提交到路由的地址,并且input表单的name=query
编写控制器
public function search(Request $request)
{
$this->validate($request, [
'query' => 'required',
]);
// 转义特殊字符
$query = str_replace('/', '\/', strip_tags($request->get('query')));
// 分页,每页10条
$articles = Article::search($query)->paginate(10);
return view('welcome.search', compact('articles','query'));
}
编写搜索展示页面
// 展示搜索关键字和搜索到总条数
搜索:{{ $query }}
(共搜索到{{ $articles->total() }}条)
// 遍历搜索的结果
@foreach($articles as $article)
-
-
{{ $article->user->name }}
-
{{ date('Y-m-d', strtotime($article->created_at)) }}
-
{{ $article->category->name }}
-
@foreach($article->tags as $tag)
{{ $tag->name }}
@endforeach
@endforeach
// 显示分页代码
{{ $articles->links() }}
ok!到此为止,咱们网站就添加上了全文搜索服务器了!
原文出处:http://www.mi360.cn/articles/40
相关文章:
11.Laravel全文搜索Elasticsearch (一)
12.Laravel全文搜索Elasticsearch (二)