Laravel + Elasticsearch 实现中文搜索的方法(4)
好了,我们执行 Kibana 看到我们已经创建好了 Index:
注 Kibana 本地 Docker 安装:后续会重点说明 Kibana 如何使用
docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://elasticsearch_host -p 5601:5601 -e SERVER_NAME=ki.test kibana:7.5.2
为了验证 Index 是否可用,可以插入一条数据看看:
curl -XPOST your_host/coding01_open/_create/1 -H 'Content-Type:application/json' -d' {"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
可以通过浏览器看看对应的数据:
有了 Index,下一步我们就可以结合 Laravel,导入、更新、查询等操作了。
Laravel Model 使用
Laravel 框架已经为我们推荐使用 Scout 全文搜索,我们只需要在 Article Model 加上官方所说的内容即可,很简单,推荐大家看 Scout 使用文档:https://learnku.com/docs/laravel/6.x/scout/5191,下面直接上代码:
<?php namespace App; use App\Tools\Markdowner; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Laravel\Scout\Searchable; class Article extends Model { use Searchable; protected $connection = 'blog'; protected $table = 'articles'; use SoftDeletes; /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = ['published_at', 'created_at', 'deleted_at']; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'user_id', 'last_user_id', 'category_id', 'title', 'subtitle', 'slug', 'page_image', 'content', 'meta_description', 'is_draft', 'is_original', 'published_at', 'wechat_url', ]; protected $casts = [ 'content' => 'array' ]; /** * Set the content attribute. * * @param $value */ public function setContentAttribute($value) { $data = [ 'raw' => $value, 'html' => (new Markdowner)->convertMarkdownToHtml($value) ]; $this->attributes['content'] = json_encode($data); } /** * 获取模型的可搜索数据 * * @return array */ public function toSearchableArray() { $data = [ 'id' => $this->id, 'title' => $this->title, 'subtitle' => $this->subtitle, 'content' => $this->content['html'] ]; return $data; } public function searchableAs() { return '_doc'; } }
内容版权声明:除非注明,否则皆为本站原创文章。