Laravel5.4中文分词搜索-使用 Laravel Scout,Elasticsearch,ik 分词(三)

上一篇地址: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();
   }
}
  1. 增删改操作代码:
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

https://www.jianshu.com/p/962e30a859ba?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

https://learnku.com/articles/4027/tutorial-write-a-search-use-laravel-scout-elasticsearch-ik-word-segmentation

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值