资讯专栏INFORMATION COLUMN

Laravel 全文检索 Scout集成Algolia

Jinkey / 3156人阅读

摘要:写在前面你是否在检索千百万级数据时为性能和速度而担忧呢,即使优化了,创建了数据库索引,还是不尽如人意呢下面就主要介绍如何集成是法国初创公司为你提供毫秒级的数据库实时搜索服务,天下武功无坚不摧,唯快不破。本文基于,其他版本大同小异。

写在前面

你是否在检索千百万级数据时为性能和速度而担忧呢,即使优化了sql,创建了数据库索引,还是不尽如人意呢?
下面就主要介绍laravel如何集成Algolia

Algolia是法国初创公司为你提供毫秒级的数据库实时搜索服务,天下武功无坚不摧,唯快不破。记住哦,是毫秒级。

本文基于laravel5.5,其他版本大同小异。

准备工作
安装laravel/scout 和 algolia/algoliasearch-client-php

</>复制代码

  1. composer require laravel/scout
  2. composer require algolia/algoliasearch-client-php
注册algolia的账号

前往https://www.algolia.com/ 注册账号,初学者可以使用免费版,然后在账户的API Keys菜单获取Application ID和Admin API Key,后面会用到

基本配置

在config/app.php文件中的providers数组中加入服务提供者

</>复制代码

  1. // Scout全文搜索
  2. LaravelScoutScoutServiceProvider::class,

使用以下命令生成scout配置文件

</>复制代码

  1. php artisan vendor:publish --provider="LaravelScoutScoutServiceProvider"

该命令会自动生成config/scout.php文件,然后我们打开.env文件,加入scout的配置

</>复制代码

  1. # scout配置
  2. SCOUT_DRIVER=algolia
  3. SCOUT_PREFIX=
  4. # algolia的Application ID
  5. ALGOLIA_APP_ID=xxxxxxxxxx
  6. # algolia的Admin API Key
  7. ALGOLIA_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxx
创建索引
创建模型并填充数据

创建模型app/Student.php,为方便后续测试,请先建表和填充数据,可以手动使用sql语句添加数据,也使用laravel自动的数据迁移和填充,可以参考 https://www.tech1024.cn/origi...

</>复制代码

  1. toArray();
  2. // Customize array...
  3. return $array;
  4. }
  5. }
把所有现有记录导入到搜索索引里

</>复制代码

  1. php artisan scout:import "AppStudent"

可能会报如下错误

</>复制代码

  1. [AlgoliaSearchAlgoliaConnectionException]
  2. Hosts unreachable: Resolving timed out after 1000 milliseconds,Resolving timed out
  3. after 1000 milliseconds,Resolving timed out after 3000 milliseconds,Resolving tim
  4. ed out after 3000 milliseconds

这是由于默认algoliasearch-client配置的连接超时时间为1秒,由于网络速度的原因,我们可以把连接时间修改一下
创建app/Services/Scout/EngineManager.php文件如下

</>复制代码

  1. setConnectTimeout(30, 30, 30);
  2. return new AlgoliaEngine($algolia);
  3. }
  4. }

打开app/Providers/AppServiceProvider.php,在boot()中加入以下代码

</>复制代码

  1. public function boot()
  2. {
  3. // …… 省略之前代码
  4. $this->app->singleton(LaravelScoutEngineManager::class, function ($app) {
  5. return new AppServicesScoutEngineManager($app);
  6. });
  7. }

是不是导入成功了呢?

</>复制代码

  1. php artisan scout:import "AppStudent"
  2. Imported [AppStudent] models up to ID: 500
  3. Imported [AppStudent] models up to ID: 1000
  4. Imported [AppStudent] models up to ID: 1500
  5. Imported [AppStudent] models up to ID: 2000
  6. Imported [AppStudent] models up to ID: 2500
  7. Imported [AppStudent] models up to ID: 3000
  8. Imported [AppStudent] models up to ID: 3500
  9. Imported [AppStudent] models up to ID: 4000
  10. Imported [AppStudent] models up to ID: 4500
  11. Imported [AppStudent] models up to ID: 5000
  12. Imported [AppStudent] models up to ID: 5500
  13. Imported [AppStudent] models up to ID: 6000
  14. Imported [AppStudent] models up to ID: 6500
  15. Imported [AppStudent] models up to ID: 7000
  16. Imported [AppStudent] models up to ID: 7500
  17. Imported [AppStudent] models up to ID: 8000
  18. Imported [AppStudent] models up to ID: 8500
  19. Imported [AppStudent] models up to ID: 9000
  20. Imported [AppStudent] models up to ID: 9500
  21. Imported [AppStudent] models up to ID: 10000
  22. All [AppStudent] records have been imported.

在https://www.algolia.com账户后... 的菜单中已经有了刚刚导入的students_index索引数据

大功告成

</>复制代码

  1. $studens = AppStudent::search("成燕")->get();
  2. dd($studens);

可以填充个百万条数据试试,检索速度,是不是比直接查询数据库要快很多呢?

更多用法请查阅官方文档 https://www.algolia.com/doc/a...

不过笔者并不推荐使用algolia检索引擎,毕竟国内的网速太慢,后续笔者会退出laravel和elasticsearch、sphinx相关的资料,请继续关注。

</>复制代码

  1. 原文 https://www.tech1024.cn/origi...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26022.html

相关文章

  • Laravel 5.3 预热:10 个你需要知道的变更

    摘要:本文经授权转自社区说明发布临近,大体构建已经完成,文档整理完成后即可发布。附带了一个响应式邮件模板,通知类中唯一需要做的就是像下面这样发送消息错误处理是一个可选的扩展包,提供了完整可用的服务。 本文经授权转自 PHPHub 社区 说明 Laravel 5.3 发布临近,大体构建已经完成,文档整理完成后即可发布。 下面是对 Laravel 5.3 新特性的整理,不完整列表。 1、全文搜...

    沈建明 评论0 收藏0
  • Laravel中利用Scout集成Elasticsearch搜索引擎

    摘要:写在前面以下简称是一个实时的分布式搜索和分析引擎。在搜索引擎方面,不仅仅有,像另一篇提到的,还有等等,这里不做评价和比较,本篇主要介绍中如何使用。首选必须安装有,请参考。本文基于,其他版本大同小异。 写在前面 Elasticsearch(以下简称es)是一个实时的分布式搜索和分析引擎。 在搜索引擎方面,不仅仅有Elasticsearch,像另一篇提到的Algolia,还有sphinx、...

    buildupchao 评论0 收藏0
  • Laravel 基于 Scout 配置实现 Elasticsearch (一)- 准备工作

    摘要:导语全文搜索是很重要的功能,实现的方式也有很多种。以下通过和实现。是用开发的,并在许可证下作为开源软件发布。官方客户端在和许多其他语言中都是可用的。根据的排名显示,是最受欢迎的企业搜索引擎,其次是,也是基于。 导语 全文搜索是很重要的功能,实现的方式也有很多种。以下通过 Laravel Scout 和 Elasticsearch 实现。先来看下各自的介绍 Laravel Scout 为...

    jsyzchen 评论0 收藏0

发表评论

0条评论

Jinkey

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<