Laravel 之搜索引擎elasticsearch扩展Scout
简介
Laravel Scout 是针对Eloquent 模型开发的一个简单的,基于驱动的全文检索系统。Scout 使用模型观察者时会自动保持你的检索索引与你的 Eloquent 记录同步。
目前,Scout 带着一个Algolia驱动;然而,扩展 Scout 并不难,你可以通过自定义驱动来自由的扩展 Scout。接下来我们就自定义搜索引擎elasticsearch来扩展Scount。
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
下载并安装elasticsearch
(1)使用elasticsearch的前提是你的主机必须安装了java的JDK,而且版本必须是1.8以上。安装JDK,并设置JAVA_HOME环境变量。
(2)解压安装包,使用cmd命令进入到\bin,首先我们可以使用命令elasticsearch-plugin list
查看插件,我们可以看到会列出一串的插件,但是我们只需要其中analysis-ik插件,如果你的主机不够强大,建议可以删除其他不必要的插件,因为会消耗主机的大部分资源,直接删除\plugins中除了analysis-ik的其他插件。
(3)重新cmd键入elasticsearch-plugin list 查看插件
(4)启动,cmd键入elasticsearch -d,在浏览器地址了中输入127.0.0.1:9200,我们可以看到如下图:
安装Scout
(1)首先,使用 composer 包管理器来安装 Scout,如果没有安装 composer 包管理器,要先安装;接着进入laravel项目的根目录使用composer 命令安装
composer require laravel/scout
(2)接下来,你需要将 ScoutServiceProvider 添加到你的 config/app.php 配置文件的 providers 数组中:
Laravel\Scout\ScoutServiceProvider::class,
(3)注册好 Scout 的服务提供者之后,你可以使用 vendor:publish Artisan 命令生成 Scout 的配置文件。这个命令会在你的 config 目录下生成 scout.php 配置文件:
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
(4)使用 composer安装scout的es驱动:
composer require tamayo/laravel-scout-elastic
(5)安装完驱动之后,修改config\scout.php配合文件,将驱动修改为elasticsearch
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
并在下方添加驱动:
'elasticsearch' => [
//laravel54是项目名,可以自定义
'index' => env('ELASTICSEARCH_INDEX', 'laravel54'),
'hosts' => [
env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'),
],
],
创建command命令
(1)使用php artisan创建command命令
php artisan make:command ESInit
(2)执行完命令后会创建app\Console\Command\ESInit.php文件,修改ESInit.php
//使用什么命令启动脚本
protected $signature = 'es:init';
//描述
protected $description = 'init laravel es for post';
(3)在app\Console\Kernel.php中挂载
protected $commands = [
\App\Console\Commands\ESInit::class
];
完成之后使用php artisan命令查看命令是否挂载成功
安装guzzlehttp/guzzle 扩展
composer require guzzlehttp/guzzle
配置
(1)修改app\Console\Command\ESInit.php
public function handle()
{
//创建template
$client=new Client(); $url=config('scout.elasticsearch.hosts')[0]. '/_template/tmp';
//$client->delete($url); $param = [
'json'=>[
'template' => config('scout.elasticsearch.index'),
'mappings' => [
'_default_' => [
'dynamic_templates' => [
[
'strings' => [
'match_mapping_type' => 'string',
'mapping' => [
'type' => 'text',
'analyzer' => 'ik_smart',
'fields' => [
'keyword' => [
'type' => 'keyword'
]
]
]
]
]
]
]
],
],
];
$client->put($url,$param); //记录
$this->info("=======创建模板成功======="); //创建index
$url = config('scout.elasticsearch.hosts')[0] . '/' . config('scout.elasticsearch.index');
//$client->delete($url);
$param=[
'json' => [
'settings' => [
'refresh_interval' => '5s',
'number_of_shards' => 1,
'number_of_replicas' => 0,
],
'mappings' => [
'_default_' => [
'_all' => [
'enabled' => false
]
]
]
]
]; $client->put($url,$param); //记录
$this->info("=========创建索引成功=========");
}
(2)在我的项目中我使用文章数据表来搜索,因此需要修改post.php,也就是posts数据对于的数据模型
use Searchable; //定义索引里面的type
public function searchableAs()
{
return "post";
} //定义有哪些字段需要搜索
public function toSearchableArray()
{
return [
'title'=>$this->title,
'content'=>$this->content,
];
}
导入数据
使用php artisan命令导入数据
php artisan scout:import "\App\Post"
导入成功之后我们在浏览器地址输栏入:127.0.0.1:9200/laravel54/post/23(laravel54是elasticsearch驱动定义的项目名,post对象的是我项目的post数据模型,23是某条数据的ID )
https://blog.csdn.net/kesixin/article/details/78636491
Laravel 之搜索引擎elasticsearch扩展Scout的更多相关文章
- 分布式搜索引擎Elasticsearch在CentOS7中的安装
1. 概述 随着企业业务量的不断增大,业务数据随之增加,传统的基于关系型数据库的搜索已经不能满足需要. 在关系型数据库中搜索,只能支持简单的关键字搜索,做不到分词和统计的功能,而且当单表数据量到达上百 ...
- 搜索引擎 ElasticSearch 之 步步为营2 【基础概念】
在正式学习 ElasticSearch 之前,首先看一下 ElasticSearch 中的基本概念. 这些概念将在以后的章节中出现多次,所以花15分钟理解一下是非常值得的. 英文好的同学,请直接移步官 ...
- 搜索引擎 ElasticSearch 之 步步为营1 【环境搭建&初识ElasticSearch】
1.下载ElasticSearch a.下载Java环境JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloa ...
- 全文搜索引擎Elasticsearch入门实践
全文搜索引擎Elasticsearch入门实践 感谢阮一峰的网络日志全文搜索引擎 Elasticsearch 入门教程 安装 首先需要依赖Java环境.Elasticsearch官网https://w ...
- Spring Boot 全文搜索引擎 ElasticSearch
参考 全文搜索引擎ElasticSearch 还是Solr? - JaJian - 博客园
- 全文搜索引擎 Elasticsearch 入门
1. 百科 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作 ...
- 3.高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建
高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建 如果大家看了我的上一篇<2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离>文章,如果能很好的 ...
- 搜索引擎elasticsearch + kibana + X-pack + IK安装部署
目录 准备安装环境 配置启动 启动elasticsearch 启动kibana 启用X-pack 安装使用IK 使用示例 官方Clients 准备安装环境 这次我们安装以下软件或插件: elastic ...
- 全文搜索引擎 Elasticsearch 安装
全文搜索引擎 Elasticsearch 安装 学习了:http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html 拼音:https://www ...
随机推荐
- [Git高级教程(二)] 远程仓库版本回退方法 - 梧桐那时雨 - CSDN博客
1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的版本到远程分支,怎么回退远程分支 ...
- CSS制作的32种图形效果[梯形|三角|椭圆|平行四边形|菱形|四分之一圆|旗帜]
转载链接:http://www.w3cplus.com/css/css-simple-shapes-cheat-sheet 前面在<纯CSS制作的图形效果>一文中介绍了十六种CSS画各种不 ...
- JavaScript 报错 注释
- maven本地仓库有jar包,maven install还是报错识别不到
去本地仓库对应jar的目录下看下,有一个 _remote.repositories 的文件打开 ***.pom>xxx=***.jar>xxx= 这个 xxx 就是你maven的setti ...
- Python中输入和输出(打印)数据
一个程序要进行交互,就需要进行输入,进行输入→处理→输出的过程.所以就需要用到输入和输出功能.同样的,在Python中,怎么实现输入和输出? Python3中的输入方式: Python提供了 inpu ...
- 一眼看穿👀JS基本概念
前段时间忙,好久没更新了,继续梳理基础知识这期总结的是JS的基本概念 标识符 所谓的标识符是指变量,函数属性的名字,或者函数的参数 第一个字符必须是一个字母,下划线(_)或者一个美元符号($),其他字 ...
- phpcms推送文章同时推送自定义字段
首先进入phpcms后台,模型管理-字段管理里,新建字段,新建字段必须是主表字段,如图所示 2 来到网站根目录,寻找phpcms\modules\content\classes\push_api.cl ...
- 【Leetcode 堆、快速选择、Top-K问题 BFPRT】数组中的第K个最大元素(215)
这道题很强大,引出了很多知识点 题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5 ...
- Nginx教程(6) 动静分离架构 (转)
一.原理 Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx 处理静态页面,To ...
- 【OI】位运算操作
一.基础操作 1.a<<b 将二进制a左移b位,不够的地方用0补位 例如 100<<2 == 10000 2.a>>b 将二进制a右移b位 例如 100>&g ...