laravel安装elasticsearch scout,用的过程中,发现一个问题,只能存在一个模板和一个索引,用的是elasticsearch 6。
一,发现问题
config/scout.php
'elasticsearch' => [ 'index' => env('ELASTICSEARCH_QUESTION', 'question'), 'hosts' => [ env('ELASTICSEARCH_HOST', 'http://localhost:9200'), ], ],
上面设置一下索引名
<?php namespace ScoutEngines\Elasticsearch; use Laravel\Scout\EngineManager; use Illuminate\Support\ServiceProvider; use Elasticsearch\ClientBuilder as ElasticBuilder; class ElasticsearchProvider extends ServiceProvider { /** * Bootstrap the application services. */ public function boot() { app(EngineManager::class)->extend('elasticsearch', function($app) { return new ElasticsearchEngine(ElasticBuilder::create() ->setHosts(config('scout.elasticsearch.hosts')) ->build(), config('scout.elasticsearch.index') //底层这块就写死了 ); }); } }
二,解决办法
1,修改config/scout.php
'elasticsearch' => [ 'index' => env('ELASTICSEARCH_QUESTION', 'question'), 'exam' => env('ES_EXAM', 'exam'), 'question' => env('ES_QUESTION', 'question'), 'hosts' => [ env('ELASTICSEARCH_HOST', 'http://localhost:9200'), ], ],
2,创建es模板和索引
php artisan make:command ESQuestion php artisan make:command ESExam
在app/console/commands目录下会产生二个文件,怎么修改,参考文章开头的连接
3,初始化es模板和索引
php artisan es:question php artisan es:exam
4,生成models
php artisan make:model ./Models/t_es_question php artisan make:model ./Models/t_es_exam
5,修改models
//t_es_question修改如下 public function __construct() { \Config::set('scout.elasticsearch.index', config('scout.elasticsearch.question')); parent::__construct(); } //t_es_exam修改如下 public function __construct() { \Config::set('scout.elasticsearch.index', config('scout.elasticsearch.exam')); parent::__construct(); }在
在调用不同model前指定index,这样可以了,还有一种方式是,就是改底层代码,改底层花的时间就比较长了。
6,导入数据
php artisan scout:import "App\Models\t_es_question" php artisan scout:import "App\Models\t_es_exam"
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/php/1950.html