您好,登录后才能下订单哦!
这期内容当中小编将会给大家带来有关怎么在Laravel中使用scout和elasticsearch实现全文搜索功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
安装需要的组件
composer require tamayo/laravel-scout-elastic composer require laravel/scout
如果composer require laravel/scout 出现报错
Using version ^6.1 for laravel/scout ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev]. - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev]. - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev]. - Conclusion: don't install laravel/scout 5.0.x-dev - Installation request for tamayo/laravel-scout-elastic ^4.0 -> satisfiable by tamayo/laravel-scout-elastic[4.0.0]. Installation failed, reverting ./composer.json to its original content.
那么使用命令
composer require laravel/scout ^5.0
修改一下配置文件(config/app.php),添加如下两个provider
'providers' => [ //es search 加上以下内容 Laravel\Scout\ScoutServiceProvider::class, ScoutEngines\Elasticsearch\ElasticsearchProvider::class, ]
添加完成,执行命令,生成config文件
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
修改config/scout.php
  'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
  'elasticsearch' => [
    'index' => env('ELASTICSEARCH_INDEX', '你的Index名字'),
    'hosts' => [
      env('ELASTICSEARCH_HOST', ''),
    ],
  ],在.env 配置ES的 账号:密码@连接
ELASTICSEARCH_HOST=elastic:密码@你的域名.com:9200
创建一个生成mapping的命令行文件,到 app/Console/Commands
<?php
namespace App\Console\Commands;
use GuzzleHttp\Client;
use Illuminate\Console\Command;
class ESInit extends Command {
  protected $signature = 'es:init';
  protected $description = 'init laravel es for news';
  public function __construct() { parent::__construct(); }
  public function handle() { //创建template
    $client = new Client(['auth'=>['elastic', 'Wangcai5388']]);
    $url = config('scout.elasticsearch.hosts')[0] . '/_template/news';
    $params = [
      'json' => [
        'template' => config('scout.elasticsearch.index'),
        'settings' => [
          'number_of_shards' => 5
        ],
        'mappings' => [
          '_default_' => [
            'dynamic_templates' => [
              [
                'strings' => [
                  'match_mapping_type' => 'string',
                  'mapping' => [
                    'type' => 'text',
                    'analyzer' => 'ik_smart',
                    'ignore_above' => 256,
                    'fields' => [
                      'keyword' => [
                        'type' => 'keyword'
                      ]
                    ]
                  ]
                ]
              ]
            ]
          ]
        ]
      ]
    ];
    $client->put($url, $params);
    // 创建index
    $url = config('scout.elasticsearch.hosts')[0] . '/' . config('scout.elasticsearch.index');
    $params = [
      'json' => [
        'settings' => [
          'refresh_interval' => '5s',
          'number_of_shards' => 5,
          'number_of_replicas' => 0
        ],
        'mappings' => [
          '_default_' => [
            '_all' => [
              'enabled' => false
            ]
          ]
        ]
      ]
    ];
    $client->put($url, $params);
  }
}在kernel中注册这个命令
<?php
namespace App\Console;
use App\Console\Commands\ESInit;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
  /**
   * The Artisan commands provided by your application.
   *
   * @var array
   */
  protected $commands = [
    ESInit::class
  ];执行这个命令 生成 mapping
php artisan es:init
修改model支持 全文搜索
<?php
namespace App\ActivityNews\Model;
use App\Model\Category;
use App\Star\Model\Star;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class ActivityNews extends Model
{
  use Searchable;
  protected $table = 'activity_news';
  protected $fillable = [
    'type_id',
    'category_id',
    'title',
    'sub_title',
    'thumb',
    'intro',
    'star_id',
    'start_at',
    'end_at',
    'content',
    'video_url',
    'status',
    'is_open',
    'is_top',
    'rank',
  ];
  public function star()
  {
    return $this->hasOne(Star::class, 'id', 'star_id');
  }
  public function category()
  {
    return $this->hasOne(Category::class, 'id', 'category_id');
  }
  public static function getActivityIdByName($name)
  {
    return self::select('id')
      ->where([
        ['status', '=', 1],
        ['type_id', '=', 2],
        ['title', 'like', '%' . $name . '%']
      ])->get()->pluck('id');
  }
}导入全文索引信息
php artisan scout:import "App\ActivityNews\Model\ActivityNews"
测试简单的全文索引
php artisan tinker
>>> App\ActivityNews\Model\ActivityNews::search('略懂皮毛')->get();上述就是小编为大家分享的怎么在Laravel中使用scout和elasticsearch实现全文搜索功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。