Laravel5使用ElasticSearch

Laravel5使用ElasticSearch

https://blog.csdn.net/qq_16829085/article/details/80725125

  1. 安装elasticsearch和ik插件 (elasticsearch的使用需要配置java环境,自行百度配置好java环境) elasticsearch集成包(包括ik中文插件)安装地址:https://github.com/medcl/elasticsearch-rtf       
  2. 测试安装  启动elasticSearch:bin/elasticSearch -d       windows系统以管理员身份运行elasticsearch.bat
  3. 测试是否安装成功  127.0.0.1:9200 
  4. 安装 ElasticSearch Scout Engine 包

    composer require tamayo/laravel-scout-elastic

      安装这个包的时候,顺便就会装好 Laravel Scout,发布一下资源

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

    5.在app.php中添加对应的Provider

                Laravel\Scout\ScoutServiceProvider::class,
                ScoutEngines\Elasticsearch\ElasticsearchProvider::class,

    6.在count.php中配置参数

     'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
     
     'elasticsearch' => [
            'index' => env('ELASTICSEARCH_INDEX', 'laravel5'),
            'hosts' => [
                env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'),
            ],
        ],

    7.创建ylaravel的索引和模板

    • php artisan make:command ESInit  创建命令行
    • 修改ESInit.php文件
      <?php
       
      namespace App\Console\Commands;
       
      use GuzzleHttp\Client;
      use Illuminate\Console\Command;
       
      class ESInit extends Command
      {
          /**
           * The name and signature of the console command.
           *
           * @var string
           */
          protected $signature = 'es:init';
       
          /**
           * The console command description.
           *
           * @var string
           */
          protected $description = 'init laravel es for post';
       
          /**
           * Create a new command instance.
           *
           * @return void
           */
          public function __construct()
          {
              parent::__construct();
          }
       
          /**
           * Execute the console command.
           *
           * @return mixed
           */
          public function handle()
          {
       
              $client = new Client();
              // 创建模版
              $url = config('scout.elasticsearch.hosts')[0] . '/_template/tmp';
              $client->put($url, [
                  'json' => [
                      'template' => config('scout.elasticsearch.index'),
                      'settings' => [
                          'number_of_shards' => 1
                      ],
                      'mappings' => [
                          '_default_' => [
                              '_all' => [
                                  'enabled' => true
                              ],
                              'dynamic_templates' => [
                                  [
                                      'strings' => [
                                          'match_mapping_type' => 'string',
                                          'mapping' => [
                                              'type' => 'text',
                                              'analyzer' => 'ik_smart',
                                              'ignore_above' => 256,
                                              'fields' => [
                                                  'keyword' => [
                                                      'type' => 'keyword'
                                                  ]
                                              ]
                                          ]
                                      ]
                                  ]
                              ]
                          ]
                      ]
                  ]
              ]);
       
              $this->info("========创建模板成功=======");
       
              $url = config('scout.elasticsearch.hosts')[0] . '/' . config('scout.elasticsearch.index');
              $client->put($url, [
                  'json' => [
                      'settings' => [
                          'refresh_interval' => '5s',
                          'number_of_shards' => 1,
                          'number_of_replicas' => 0,
                      ],
                      'mappings' => [
                          '_default_' => [
                              '_all' => [
                                  'enabled' => false
                              ]
                          ]
                      ]
                  ]
              ]);
              $this->info("========创建索引成功=======");
      }
       
      }

      挂载ESInit,在APP\Console\Kerbel.php文件$commands数组中添加如下代码

      \App\Console\Commands\ESInit::class

      8.调用es脚本    php artisan es:init

      9.导入数据库和数据

      修改数据模型,以post为例

      <?php
       
      namespace App;
      use Illuminate\Database\Eloquent\Model;
      use Illuminate\Database\Eloquent\Builder;
      use Laravel\Scout\Searchable; class Post extends Model
      {
          use Searchable;
       
          protected $guarded=[]; //不可以注入的字段
       
          //定义索引里面的type
          public function searchableAs()
          {
              return 'posts_index';
          }
       
          //定义有哪些字段需要搜索
          public function toSearchableArray()
          {
              return[
                  'title'=>$this->title,
                  'content'=>$this->content,
              ];
          } 

      • 导入数据模型,php artisan scout:import “App\Post”
      • 验证 http://localhost:9200/laravel5/posts_index/1

      10.Postcontroller中完成功能代码的撰写

          public function search()
          {
              $this->validate(request(),[
                  'query'=>'required'
                  ]);
              $query=request('query');
       
       
              $posts=Post::search($query)->paginate(10);
              return view('post/search',compact('posts','query'));
          }

       

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/113124.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vscode配置JAVA环境_捷达VS5进取版有哪些配置

    vscode配置JAVA环境_捷达VS5进取版有哪些配置VSCode配置JAVA开发环境1:给机器安装JDK、MAVEN下载JDK下载路径:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html配置JAVA的环境变量我的JDK在硬盘的位置:新建环境变量JAVA_HOME:D:\Applications\JAVAjdk…

  • Python Flask Web 框架入门

    Python Flask Web 框架入门Flask是一个轻量级的基于Python的web框架。本文适合有一定HTML、Python、网络基础的同学阅读。1.简介这份文档中的代码使用Python3运行。是的,所以读者需要自己在电脑上安装Python3和pip3。建议安装最新版本,我使用的是Python3.6.4。安装方法,可以自行谷歌或者百度。建议在linux下实践本教程中命令行操作、执行代码。2…

  • Windows文件名长度限制

    win7x64位环境:260个长度是作为总的文件名长度限制。例如:所在文件夹的长度为50则文件名的长度被限制在210之下,超出的话会被进行截断。如果在程序中的话,超出长度的话MoveFile/CopyFile会返回错误,处理失败。例子:1.我手动在C:\建立一个文件,使用280个长度进行重命名,实际生成的却是文件名是256个

  • python字典详解_python字典取值

    python字典详解_python字典取值字典字典的key和value一一对应的,字典是可变的,也是有序的(python3.6版本开始字典有序),可迭代的增加元素当key不存在时,直接赋值a={"status"

  • 0基础Java自学之路

    0基础Java自学之路前言最近逛知乎的时候,经常看到有人在问“0基础如何自学Java”、“干了几年**,想转行干Java靠谱吗”等问题。不禁让我回想起了自己当初自学Java的日子,因此在这个周末花了点时间,整理了这篇文章,希望对这些正打算自学Java的或者打算转行Java的人有点帮助。我的自学之路先告诉你们我的自学过程可能让你们有点参考。大三的时候,班主任请了2个已经拿到offer的实验室同学来跟…

  • qtcpsocket断开_QTcpSocket 对连接服务器中断的不同情况进行判定(六种情况,其中一种使用IsNetworkAlive API方法)…「建议收藏」

    qtcpsocket断开_QTcpSocket 对连接服务器中断的不同情况进行判定(六种情况,其中一种使用IsNetworkAlive API方法)…「建议收藏」简述对于一个C/S结构的程序,客户端有些时候需要实时得知与服务器的连接状态。而对于客户端与服务器断开连接的因素很多,现在就目前遇到的情况进行一下总结。分为下面六种不同情况客户端网线断开客户端网络断开客户端通过HTTP代理连接服务器,代理机器断开代理客户端通过HTTP代理连接服务器,代理机器的网络断开客户端通过HTTP代理连接服务器,代理机器的网线断开服务器断开同时对于以上六种情况又分为连接服务器之…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号