介绍
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实现中文全文搜索,并且添加了查询界面


被折叠的 条评论
为什么被折叠?



