内容简介:使用Elasticsearch搜索引擎,配置ik中文分词,与Laravel模型关联,然后实现搜索的业务逻辑。本篇是结束篇,使用Laravel的Scout扩展包完成搜索功能续上篇,已经安装和配置好了Scout和支持Elastic的扩展包编辑Article模型,将LaravelScoutSearchable 这个 trait加到你想要做检索的模型,这个trait会注册一个模型观察者来保持模型同步到检索服务的驱动:
使用Elasticsearch搜索引擎,配置ik中文分词,与 Laravel 模型关联,然后实现搜索的业务逻辑。本篇是结束篇,使用Laravel的Scout扩展包完成搜索功能
续上篇,已经安装和配置好了Scout和支持Elastic的扩展包
编辑Article模型,将LaravelScoutSearchable 这个 trait加到你想要做检索的模型,这个trait会注册一个模型观察者来保持模型同步到检索服务的驱动:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Searchable; class Article extends Model { // 引入这个trait,这个trait会注册一个模型观察者来保持模型同步到检索服务的驱动 use Searchable; //... // 定义索引里面的type(类型)-- es中类型相当于 mysql 中的表 public function searchableAs() { return 'article'; } // 定义有哪些字段需要搜索 public function toSearchableArray() { return [ 'id' => $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
<form action="{{ url('/search') }}" class="search fr"> <input type="text" name="query" placeholder="客官,想搜点啥?"> <button type="submit">搜索</button> </form>
编写控制器
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')); }
编写搜索展示页面
// 展示搜索关键字和搜索到总条数 <div class="head clearf"> <h2 class="title fl active"> 搜索:{{ $query }} <span class="search_count">(共搜索到{{ $articles->total() }}条)</span> </h2> </div> // 遍历搜索的结果 <ul class="content"> @foreach($articles as $article) <li class="item"> <div class="row"> <h3 class="title"><a href="{{ route('articles.show', ['id' => $article->id]) }}">{{ $article->title }}</a> </h3> </div> <div class="row"> <ul class="info"> <li> <i></i> <a href="{{ route('users.show', ['id' => $article->user->id, 'name' => $article->user->name]) }}">{{ $article->user->name }}</a> </li> <li> <i></i> {{ date('Y-m-d', strtotime($article->created_at)) }} </li> <li> <i></i> <a href="{{ route('articles.index', ['category' => $article->category->name]) }}">{{ $article->category->name }}</a> </li> <li> <i></i> @foreach($article->tags as $tag) <a href="{{ route('articles.index', ['tag' => $tag->name]) }}">{{ $tag->name }}</a> @endforeach </li> </ul> </div> <div class="row"> <div class="desc clearf"> <a href="{{ route('articles.show', ['id' => $article->id]) }}"> <img class="col-4 fl" src="{{ $article->pic }}" alt="{{ $article->title }}" title="{{ $article->title }}"> </a> <div class="text col-8 fr"> {{ $article->intro }} </div> <div class="more"> <a href="{{ route('articles.show', ['id' => $article->id]) }}">阅读全文</a> </div> </div> </div> </li> @endforeach </ul> // 显示分页代码 <div class="links"> {{ $articles->links() }} </div>
ok!到此为止,咱们网站就添加上了全文搜索服务器了!
以上所述就是小编给大家介绍的《12.Laravel全文搜索Elasticsearch (三)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- mysql中文全文搜索
- 全文搜索-ElasticSearch
- Elasticsearch构建全文搜索系统
- ElasticSearch全文搜索引擎
- ElasticSearch--分布式全文搜索框架
- 全文搜索引擎 Elasticsearch 入门教程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Dynamic Programming
Richard Bellman / Dover Publications / 2003-03-04 / USD 19.95
An introduction to the mathematical theory of multistage decision processes, this text takes a "functional equation" approach to the discovery of optimum policies. The text examines existence and uniq......一起来看看 《Dynamic Programming》 这本书的介绍吧!