关于laravel使用es的正确姿势

发布时间 - 2020-09-19 00:00:00    点击率:

下面由laravel教程栏目给大家介绍laravel使用es的正确姿势,希望对需要的朋友有所帮助!

Elasticsearch 简介

Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

课程推荐→:《elasticsearch全文搜索实战》(实战视频)来自课程《千万级数据并发解决方案(理论+实战)》

ES 和 Mysql

ES 里的概念类比于 Mysql 如下图所示:

倒排索引

在说倒排索引之前我们先说说什么是正排索引。正排索引也称为”前向索引”,它是创建倒排索引的基础。

如上在查询一个 keyword 在哪些文档里包含的时候,需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。这个时候我们就用到了倒排索引,首先将文档分词。

比如我们要查询‘搜索引擎’这个关键词在哪些文档中出现过。首先我们通过倒排索引可以查询到该关键词出现的文档位置是在1和3中;然后再通过正排索引查询到文档1和3的内容并返回结果。

Laravel 使用 ES

安装插件

basemkhirat/elasticsearch 是 Laravel 中使用 ES 的一个扩展,使用起来非常方便:
1)安装方法

$ composer require basemkhirat/elasticsearch

2)发布

$ php artisan vendor:publish –provider=”Basemkhirat\Elasticsearch\ElasticsearchServiceProvider”

配置

这样我们就安装好了,如下是我们的连接配置:

'connections' => [
    'default' => [
        'servers' => [
            [
                "host" => env("ELASTIC_HOST", "127.0.0.1"),
                "port" => env("ELASTIC_PORT", 9200),
                'user' => env('ELASTIC_USER', ''),
                'pass' => env('ELASTIC_PASS', ''),
                'scheme' => env('ELASTIC_SCHEME', 'http'),
            ]
        ],
        'index' => env('ELASTIC_INDEX', 'my_index')
    ]],

servers 里可以加入我们的集群配置。

使用方法

该插件的使用方法可借鉴 Laravel 的查询构造器,支持常用的如 wherewhereInwhereBetweenorderByfirstget,也支持分页方法paginate

$documents = ES::connection(“default”)
             ->index(“my_index”)
              ->type(“my_type”)
              ->get();    # return a collection of results

设置字段权重:

ES::type(“my_type”)->search(“hello”, function($search){
   $search->boost(2)->fields([“title” => 2, “content” => 1])
})->get();

我们也可以通过修改源码扩充自己需要用到的方法,也可以构造原生的查询语句:

$params['body'] = [
            'aggs' => [
                'all_created' => [
                    'terms' => [
                        'field' => 'element.raw',
                        'size'  => $this->_mAggsPageSize                    ],

                    'aggs' => [

                        'sum_pv' => [
                            'sum' => ['field' => 'pv'],
                        ],
                    ],
                ],
            ],
        ];

结语

ES 内置分词器对中分支持并不友好,比较推荐的是 IK分词器,需要注意的是ik版本需要与ES的版本号保持一致                                                


# laravel  # php  # composer  # mysql  # 封装  # require  # 接口  # Collection  # 并发  # function  # default  # elasticsearch  # lucene  # 搜索引擎  # 关键词  # 文档  # 的是  # 是在  # 好了  # 它是  # 可以通过  # 给大家  # 然后再  # 分页 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何在橙子建站上传落地页?操作指南详解  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  昵图网官方站入口 昵图网素材图库官网入口  详解vue.js组件化开发实践  Python文件操作最佳实践_稳定性说明【指导】  Laravel如何生成URL和重定向?(路由助手函数)  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  详解jQuery停止动画——stop()方法的使用  Laravel怎么在Blade中安全地输出原始HTML内容  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel如何创建自定义Artisan命令?(代码示例)  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  怎样使用JSON进行数据交换_它有什么限制  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Android滚轮选择时间控件使用详解  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  使用spring连接及操作mongodb3.0实例  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  在线教育网站制作平台,山西立德教育官网?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  如何获取免费开源的自助建站系统源码?  如何在阿里云购买域名并搭建网站?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  西安专业网站制作公司有哪些,陕西省建行官方网站?  装修招标网站设计制作流程,装修招标流程?  详解阿里云nginx服务器多站点的配置  如何快速使用云服务器搭建个人网站?  如何快速生成高效建站系统源代码?  网站建设要注意的标准 促进网站用户好感度!  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  HTML 中动态设置元素 name 属性的正确语法详解  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel如何使用Sanctum进行API认证?(SPA实战)  JavaScript常见的五种数组去重的方式  详解jQuery中的事件  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册