Home> PHP Framework> Laravel> body text

Teach you how to use elasticsearch in laravel (clear steps)

藏色散人
Release: 2021-10-22 09:19:42
forward
2362 people have browsed it

The following tutorial column ofLaravelwill introduce how to use elasticsearch in laravel (the steps are clear). I hope it will be helpful to everyone!

Install related extension packages

  • guzzlehttp/guzzle
  • elasticsearch/elasticsearch
  • laravel /scout
  • babenkoivan/scout-elasticsearch-driver
  • predis/predis Large amounts of data require queue synchronization and installation when pulling data

1. Install guzzlehttp/guzzle

composer require guzzlehttp/guzzle
Copy after login

Write the Http service class in the app/Services directory

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(); }}
Copy after login

2. Install elasticsearch/elasticsearch

composer require elasticsearch/elasticsearch
Copy after login

3. Install laravel/scout

composer require laravel/scout php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Copy after login

4. Install scout third-party driver babenkoivan/scout-elasticsearch-driver

composer require babenkoivan/scout-elasticsearch-driver php artisan vendor:publish --provider="ScoutElastic\ScoutElasticServiceProvider"
Copy after login

scout service configuration, add configuration items in env

// 驱动的host,若需账密:http://es_username:password@127.0.0.1:9200SCOUT_ELASTIC_HOST=elasticsearch:9200// 驱动SCOUT_DRIVER=elastic// 队列配置,数据量大时建议开启SCOUT_QUEUE=true
Copy after login

5. Install predis/predis

composer require predis/predis
Copy after login

Initialize elatic Template

  • The command file is generated by configuring the artisan command here

    php artisan make:command EsInit
    Copy after login
    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'); }}
    Copy after login

    Generate the retrieval model

    php artisan make:model Models/Article
    Copy after login

Create model index configuration file

  • Elasticsearch\ArticleIndexConfigurator.php
     [ 'analyzer' => [ 'es_std' => [ 'type' => 'standard', 'stopwords' => '_spanish_' ] ] ] ];}
    Copy after login

Create model retrieval rule file

  • Elasticsearch\SearchRules\ArticleRule.php

     [ 'title' => [ 'type' => 'unified', ], 'content' => [ 'type' => 'unified', ], ] ]; } //进行 match 搜索,会分词 public function buildQueryPayload() { $query = $this->builder->query; return [ 'must' => [ 'query_string' => [ 'query' => $query, ], ], ]; }}
    Copy after login

##Set model Mapping and search fields
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, ]; }}
Copy after login

Use steps

  • Generate elatic Template similar to mysql table structure

    php artisan es:init
    Copy after login
  • Update elatic type mapping

    php artisan elastic:update-mapping "App\Models\Article"
    Copy after login
  • Import database data into elatic

    php artisan scout:import "App\Models\Article"
    Copy after login
  • PS: Other commands

  • Clear elatic data

    php artisan scout:flush "App\Models\Article"
    Copy after login

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

Please check the documentation for other uses

The above is the detailed content of Teach you how to use elasticsearch in laravel (clear steps). For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:learnku.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!