laravel下使用elasticsearch+analysis-ik的全文搜索演示程序

介绍

        ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它是基于java开发的,需要安装jdk8,才能正常启动。

        analysis-ik是一个中文的分词插件,可以实现中文的分词。

laravel项目的创建

1.新建项目 

laravel new newelasticsearch

 2.新建一个post表和post模型

php artisan make:model Models/Post -m

3.修改post的迁移文件

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title')->default('')->comment('标题');
        $table->mediumText('content')->comment('内容');
        $table->timestamps();
    });
}

 4.修改.env.example文件名为.env,数据库配置

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

 5.运行迁移文件生成post表

php artisan migrate

6.创建填充文件PostsTableSeeder

php artisan make:seed PostsTableSeeder

 修改PostsTableSeeder文件

/**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('articles')->insert([
            [
                'title' => '作业克星写字机器人火了引发网友热议',
                'content' => '有媒体报道初三女生用压岁钱网购“写字机器人”帮自己抄写寒假作业,因为两天时间抄完作业还没有错别字,被母亲发现了端倪.'
            ],
            [
                'title' => 'NASA:2028年4名宇航员将重返月球停留7天',
                'content' => '美国国家航空航天局(NASA)计划将在2028年登陆月球,并建立一个可持续发展的月球殖民地,以便宇航员能够定期往返于地球.'
            ]
        ]);
    }

运行填充文件

php artisan db:seed --class=PostsTableSeeder

 7.修改web.php

Route::get('/', function () {
    return redirect('/search');
});

Route::get('/search', [
    'uses' => 'PostController@search'
]);

Route::get('/detail/{id}', [
    'uses' => 'DetailController@index'
]);

 

8.添加baijunyao/laravel-scout-elasticsearch ,安装 driver 

composer require baijunyao/laravel-scout-elasticsearch

 修改config/app.php

'providers' => [

    // ...

    /**
     * Elasticsearch全文搜索
     */
    Laravel\Scout\ScoutServiceProvider::class,
    Baijunyao\LaravelScoutElasticsearch\ElasticsearchServiceProvider::class,
],

发布配置项

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

在.env文件中增加配置项

SCOUT_DRIVER=elasticsearch

在/app/Models/Post.php 中定义全文搜索

 use Searchable;

    /**
     * 索引的字段
     *
     * @return array
     */
    public function toSearchableArray()
    {
        return $this->only('id', 'title', 'content');
    }

生成索引:

php artisan elasticsearch:import "App\Models\Post"

9.在app/Http/Controllers下新建PostController.php,需要把要搜索的内容传给 search() 方法即可

class PostController extends Controller
{
    public function search(Request $request)
    {
        $q = $request->get('query');
        $paginator = [];
        if ($q) {
            $paginator = Posts::search($q)->paginate();
        }

        return view('search', compact('paginator', 'q'));
    }
}

 elasticsearch和analysis-ik 插件:

 可以直接使用项目https://github.com/medcl/elasticsearch-rtf

当前的版本是 Elasticsearch 5.1.1,ik 插件也是直接自带了。

安装好 ElasticSearch,跑起来服务,测试服务安装是否正确:

$ curl http://localhost:9200

{
  "name" : "e3ZsfC9",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "4GVtZiPDTwGFlX7hsWQ6AQ",
  "version" : {
    "number" : "5.1.1",
    "build_hash" : "5395e21",
    "build_date" : "2016-12-06T12:36:15.409Z",
    "build_snapshot" : false,
    "lucene_version" : "6.3.0"
  },
  "tagline" : "You Know, for Search"
}

如果正确的打印以上信息,证明 ElasticSearch 已经安装好了,并且该项目中有ik 插件

项目运行

1.首先运行Elasticsearch 5.1.1,进入Elasticsearch文件夹下,命令:./bin/elasticsearch

2.进入laravel项目的elasticsearch的文件夹下,命令:php artisan serve

3.访问http://localhost:8000/即可查询

4.程序截图

参考

本文参考laravel下elasticsearch+analysis-ik实现中文全文搜索,并且添加了查询界面

github地址:https://github.com/zlb2016/elasticsearchproject

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值