• 技术文章 >php框架 >Laravel

    教你在laravel中如何使用elaticsearch(步骤分明)

    藏色散人藏色散人2021-10-22 09:19:42转载151
    下面由Laravel教程栏目带大家介绍在laravel中如何使用elaticsearch(步骤分明),希望对大家有所帮助!

    安装相关扩展包


    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

    创建 model 索引配置文件

    创建 model 检索规则文件

    设置 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,
            ];
        }}

    使用步骤

    使用检索

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

    其他使用请自行查看文档

    以上就是教你在laravel中如何使用elaticsearch(步骤分明)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:laravel
    上一篇:Laravel怎么创建Zip文件并实现下载?(附代码实例) 下一篇:速看!新出一个基于laravel的开源CMS
    大前端线上培训班

    相关文章推荐

    • 10个优质的用来搭建 Laravel 应用的包(分享)• 通过实例来了解Laravel中管道的使用方法• Laravel8出新功能啦!通过禁用延迟来定位N+1问题• Laravel怎么创建Zip文件并实现下载?(附代码实例)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网