91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在laravel中使用elaticsearch

發布時間:2021-10-15 15:33:30 來源:億速云 閱讀:164 作者:iii 欄目:編程語言

這篇文章主要講解了“怎么在laravel中使用elaticsearch”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么在laravel中使用elaticsearch”吧!

                           

安裝相關擴展包

  • guzzlehttp/guzzle

  • elasticsearch/elasticsearch

  • laravel/scout

  • babenkoivan/scout-elasticsearch-driver

  • predis/predis  數據量大需要使用隊列同步、拉取數據時安裝


1.安裝 guzzlehttp/guzzle

composer require guzzlehttp/guzzle
在 app/Services 目錄下編寫 Http 服務類
<?php

namespace App\Services;use GuzzleHttp\Client;use GuzzleHttp\Cookie\CookieJar;class HttpService{

    protected $client;

    public function __construct()
    {
        $this->client = new Client(['verify' => false, 'timeout' => 0,]);
    }

    /**
     * 發送 get 請求
     * @param $url
     * @param array $aQueryParam
     * @param string $isDecode
     * [@return](https://learnku.com/users/31554) mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function get($url, $aQueryParam = [], $isDecode = true)
    {
        $response = $this->client->request('GET',
            $url,
            [
                'query' => $aQueryParam            ]);
        if($isDecode){
            return \GuzzleHttp\json_decode($response->getbody()->getContents(), true);
        }
        return $response->getbody()->getContents();
    }

    /**
     *  發送 post 請求
     * @param $url
     * @param array $aParam
     * @param string $type
     * @param string $isDecode
     * [@return](https://learnku.com/users/31554) mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function post($url, $aParam = [], $type = 'form_params', $isDecode = true)
    {
        $aOptions = [];
        // Sending application/x-www-form-urlencoded POST
        if ($type == 'form_params') {
            $aOptions['form_params'] = $aParam;
        }
        //  upload JSON data
        if ($type == 'json') {
            $aOptions['json'] = $aParam;
        }
        $response = $this->client->request('POST', $url, $aOptions);

        if($isDecode){
            return \GuzzleHttp\json_decode($response->getbody()->getContents(), true);
        }
        return $response->getbody()->getContents();
    }

    /**
     *  發送 put 請求
     * @param $url
     * @param array $aParam
     * @param string $type
     * @param string $isDecode
     * [@return](https://learnku.com/users/31554) mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function put($url, $aParam = [], $type = 'form_params', $isDecode = true)
    {
        $aOptions = [];
        // Sending application/x-www-form-urlencoded POST
        if ($type == 'form_params') {
            $aOptions['form_params'] = $aParam;
        }
        //  upload JSON data
        if ($type == 'json') {
            $aOptions['json'] = $aParam;
        }
        $response = $this->client->request('PUT', $url, $aOptions);

        if($isDecode){
            return \GuzzleHttp\json_decode($response->getbody()->getContents(), true);
        }
        return $response->getbody()->getContents();
    }

    /**
     * 保存遠程文件到本地
     * 跟隨第三方服務器url重定向
     * @param $url
     * [@return](https://learnku.com/users/31554) bool|string
     */
    public function getRemoteFile($url)
    {
        $jar = new CookieJar();
        $aOptions = ['cookies' => $jar];
        $response = $this->client->request('GET', $url, $aOptions);
        return $response->getBody()->getContents();
    }}

2.安裝 elasticsearch/elasticsearch

composer require elasticsearch/elasticsearch

3.安裝 laravel/scout

composer require laravel/scout

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

4.安裝 scout 第三方驅動 babenkoivan/scout-elasticsearch-driver

composer require babenkoivan/scout-elasticsearch-driver

php artisan vendor:publish --provider="ScoutElastic\ScoutElasticServiceProvider"

scout 服務配置,在 env 中增加配置項

// 驅動的host,若需賬密:http://es_username:password@127.0.0.1:9200SCOUT_ELASTIC_HOST=elasticsearch:9200// 驅動SCOUT_DRIVER=elastic// 隊列配置,數據量大時建議開啟SCOUT_QUEUE=true

5.安裝 predis/predis

composer require predis/predis

初始化 elatic Template

  • 這里以 artisan 命令的方式配置 生成命令文件

    php artisan make:command EsInit
    <?php
    namespace App\Console\Commands;use App\Services\HttpService;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 article';
    
      /**
       * Create a new command instance.
       *
       * [@return](https://learnku.com/users/31554) void
       */
      protected  $http;
      public function __construct()
      {
          parent::__construct();
          parent::__construct();
          $this->http = new HttpService();
      }
    
      /**
       * Execute the console command.
       *
       * [@return](https://learnku.com/users/31554) mixed
       */
      public function handle()
      {
          $this->createTemplate();
      }
      protected function createTemplate()
      {
          $aData = [
              /*
              * 這句是取在scout.php(scout是驅動)里我們配置好elasticsearch引擎的index項。
              * PS:其實都是取數組項,scout本身就是return一個數組,
              * scout.elasticsearch.index就是取
              * scout[elasticsearch][index]
              * */
              'template'=>config('scout.elasticsearch.index'),
              'mappings'=>[
                  'articles' => [
                      'properties' => [
                          'title' => [
                              'type' => 'text'
                          ],
                          'content' => [
                              'type' => 'text'
                          ],
                          'created_at' => [
                              'format' => 'yy-MM-dd HHss',
                              'type' => 'date'
                          ],
                          'updated_at' => [
                              'format' => 'yy-MM-dd HHss',
                              'type' => 'date'
                          ]
                      ]
                  ]
              ],
          ];
          $url = config('scout.elasticsearch.hosts')[0] . '/' . '_template/rtf';
          $this->http->put($url,$aData,'json');
      }}

    生成檢索 model

    php artisan make:model Models/Article

創建 model 索引配置文件

  • Elasticsearch\ArticleIndexConfigurator.php

    <?php
    namespace App\Elasticsearch;use ScoutElastic\IndexConfigurator;use ScoutElastic\Migratable;class ArticleIndexConfigurator extends IndexConfigurator{
      use Migratable;
      protected $name = 'articles';
      /**
       * @var array
       */
      protected $settings = [
          'analysis' => [
              'analyzer' => [
                  'es_std' => [
                      'type' => 'standard',
                      'stopwords' => '_spanish_'
                  ]
              ]
          ]
      ];}

創建 model 檢索規則文件

  • Elasticsearch\SearchRules\ArticleRule.php

    <?php
    namespace App\Elasticsearch\SearchRules;use ScoutElastic\SearchRule;class ArticleRule extends SearchRule{
      /*
       * @inheritdoc
       */
      public function buildHighlightPayload()
      {
          return [
              'fields' => [
                  'title' => [
                      'type' => 'unified',
                  ],
                  'content' => [
                      'type' => 'unified',
                  ],
              ]
          ];
      }
    
      //進行 match 搜索,會分詞
      public function buildQueryPayload()
      {
          $query = $this->builder->query;
          return [
              'must' => [
                  'query_string' => [
                      'query' => $query,
                  ],
              ],
          ];
      }}

設置 model  Mapping 及檢索字段

class Article extends Model{
    protected $indexConfigurator = ArticleIndexConfigurator::class;
    use Searchable;

    /**
     * 檢索規則
     * @var string[]
     */
    protected $searchRules = [
        ArticleRule::class
    ];

    // 設置模型字段的映射關系
    protected $mapping = [
        'properties' => [
            'id' => [
                'type' => 'integer',
            ],
            'title' => [
                'type' => 'text',
                'analyzer' => 'ik_max_word',
                'search_analyzer' => 'ik_max_word',
                'index_options' => 'offsets',
                'store' => true
            ],
            'content' => [
                'type' => 'text',
                'analyzer' => 'ik_max_word',
                'search_analyzer' => 'ik_max_word',
                'index_options' => 'offsets',
                'store' => true
            ],
            'number' => [
                'type' => 'integer',
            ],
        ],
    ];

    /**
     * 設置 es 檢索返回的字段
     * [@return](https://learnku.com/users/31554) array
     */
    public function toSearchableArray() {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'content' => $this->content,
        ];
    }}

使用步驟

  • 生成 elatic Template 類似 mysql 表結構

    php artisan es:init
  • 更新 elatic 類型映射

    php artisan elastic:update-mapping "App\Models\Article"
  • 數據庫數據導入 elatic

    php artisan scout:import "App\Models\Article"
  • PS: 其他命令

  • 清空 elatic 數據

    php artisan scout:flush "App\Models\Article"

使用檢索

 $query = Article::search('二胡')
            ->paginateRaw(3,'article',1);
        dd($query->items()['hits']);

其他使用請自行查看文檔

感謝各位的閱讀,以上就是“怎么在laravel中使用elaticsearch”的內容了,經過本文的學習后,相信大家對怎么在laravel中使用elaticsearch這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

二连浩特市| 尚义县| 珲春市| 电白县| 阳高县| 淮安市| 容城县| 鄯善县| 温泉县| 电白县| 汝阳县| 平山县| 榕江县| 荥阳市| 阿克苏市| 泸定县| 城固县| 无为县| 从化市| 莎车县| 贵溪市| 兴安县| 大连市| 古田县| 富民县| 陕西省| 山丹县| 城步| 阿拉善右旗| 余庆县| 巍山| 广宗县| 图片| 迁西县| 曲麻莱县| 乌兰县| 石河子市| 阆中市| 田林县| 林州市| 五台县|