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 ...
随机推荐
- python 数据文件操作——读入数据
- Python科学计算生态圈--Scipy
- Dijkstra,floyd,spfa三种最短路的区别和使用
这里不列举三种算法的实现细节,只是简单描述下思想,分析下异同 一 Dijkstra Dijkstra算法可以解决无负权图的最短路径问题,只能应付单源起点的情况,算法要求两个集合,开始所有点在第二个集合 ...
- Leetcode16.3Sum Closest最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如,给定数 ...
- 有趣的HTML5 Web SQL 数据库
Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs. 核心方法 以下是规范中定义的三个核心方法: openD ...
- C 语言中 #pragma 的使用
在所有的预处理指令中,#Pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情 ...
- git 报错:没有权限 remote: error: unable to unlink old 'README.md' (Permission denied)
解决:
- python中的True和False
返回真假时,需要为: return True return False
- LintCode刷题笔记-- LongestCommonSquence
标签:动态规划 题目描述: Given two strings, find the longest common subsequence (LCS). Your code should return ...
- React项目动态设置title标题
在React搭建的SPA项目中页面的title是直接写在入口index.html中,当路由在切换不用页面时,title是不会动态变化的.那么怎么让title随着路由的切换动态变化呢?1.在定义路由时增 ...