上一篇地址:https://blog.csdn.net/huangfenhu/article/details/94009241
创建一个文章表和文章模型:
php artisan make:model Models/Article -m
修改2019_06_27_064939_create_articles_table.php内容,给表articels添加字段:
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->default('')->comment('标题');
$table->mediumText('content')->comment('文章内容');
$table->timestamps();
});
}
运行迁移生成表:
php artisan migrate
创建填充文件:
php artisan make:seed ArticlesTableSeeder
修改填充文件database/seeds/ArticlesTableSeeder.php内容:
public function run()
{
DB::table('articles')->insert([
[
'title' => 'elasticsearch',
'content' => '一个基于elasticsearch的搜索引擎',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'title' => 'elasticsearch analysis ik',
'content' => '用于 elasticsearch 的中文分词插件',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]
]);
}
运行填充命令生成数据:
php artisan db:seed --class=ArticlesTableSeeder
搜索索引的CURD操作
提示:在model中进行增删改操作后,scount就会自动对索引进行相应的操作(切记最好在model文件中操作才可以哦,
其它文件自己偿试)
Model模型中定义全文搜索:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Article extends Model
{
use Searchable;
public function searcheableAs()
{
return "article";
}
/**
* 索引的字段
*
* @return array
*/
public function toSearchableArray()
{
//带索引的相关字段
return [
'title' => $this->title,
'content' => $this->content
];
}
}
从mysql向elasticsearch索引中导入数据:
php artisan scout:import "App\Models\Article"
创建ArticleController文件:
php artisan make:Controller ArticleController
搜索索引的查询功能:
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function index(Request $request)
{
$query = $request->get('query');
$paginator = [];
if ($query) {
$size = 10;
//$paginator = Article::search($query)->paginate($size);//简单的搜索功能
//$paginator = Article::search($query)->orderBy('id','desc')->paginate($size);//带排序的搜索功能
//$paginator = Article::search($query)->where('id', 3)->orderBy('id','desc')->paginate($size);//带简单筛选的搜索功能
}
return view('index', compact('paginator', 'query'));
}
}
mysql与索引数据的增删改:
1. model模型代码:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Article extends Model
{
use Searchable;
public function searcheableAs()
{
return "article";
}
/**
* 索引的字段
*
* @return array
*/
public function toSearchableArray()
{
return [
'title' => $this->title,
'content' => $this->content
];
}
/*
* 只有使用Model中的增加功能,scout才能自动添加数据到elasticsearch服务器中
*/
public function add($data)
{
$this->insert($data);
}
/*
* 修改对应的数据
*/
public function edit($id, $content)
{
$list = $this->where('id', $id)->first();
$data['content'] = $content;
$list->where('id', $id)->update($data);
}
/*
* 删除相关数据
*/
public function del($id)
{
$this->where('id', $id)->delete();
}
}
- 增删改操作代码:
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
/*
* 增加新的数据及索引实例
*/
public function add()
{
$Article= new Article();
//调用model中的函数可以自动更新索引数据
$Article->add(array(
'title' => 'elasticsearch is Ok',
'content' => '高考,志愿,院校',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
));
}
/*
* 修改数据及索引实例
*/
public function update()
{
$model = new Article();
$model->edit(9,'莘莘学子,展翅高飞!');
}
/*
* 删除相关数据及索引实例
*/
public function del()
{
$model = new Article();
$model->del(1);
}
/*
* 删除Model模型对应索引的所有实例
*/
public function delIndex()
{
$model = new Article();
$model->removeAllFromSearch();
}
/*
* 查询具体的索引信息
*/
public function selectIndex()
{
$paginator = Article::search('')->orderBy('id','desc')->raw(); //查询Model模型对应的索引信息
dump($paginator);
}
}
感谢以下帖子的分享:
https://learnku.com/articles/25179