lumen框架使用Elasticsearch详解
该博文是集合几个博客踩坑得来的,百度热搜前几篇都是缺胳膊少腿的,所以结合几篇博客实现了一遍。
一、lumen使用Elasticsearch
首先需要搭建好的elasticsearch环境:
http://xxx.xxx.xxx:9200/
http://xxx.xxx.xxx:8200/
http://xxx.xxx.xxx:7200/
(1) lumen使用composer引入Elasticsearch插件
在lumen 的 composer.json 包依赖管理里加入如下插件。
"require": {
"fadion/bouncy": "dev-l5"
},
使用下面命令更新下载插件:
composer update "fadion/bouncy"
(2) 配置lumen文件
在bootstrap/app.php里面注册新的服务(添加以下代码,并注册在AppServiceProvider之后。
$app->register(Fadion\Bouncy\BouncyServiceProvider::class);

把 "vendor/fadion/bouncy" 包中的config文件夹中的文件复制到自己的config文件夹中,并把config.php重命名为bouncy.php,如图所示:

在AppServiceProvider.php中加载搜索引擎配置:
protected function loadConfigFile()
{
$this->app->configure('elasticsearch');
}

改写默认加载搜索引擎配置的函数(注意!在lumen框架缺少原来加载配置路径函数,需要手动配置)并且使用引入:
$this->config_path('bouncy.php')
$this->config_path('elasticsearch.php')
// 加载配置文件路径函数
function config_path(){
return app()->basePath('config');
}

(3)配置elasticsearch.php文件配置连接的搜索引擎地址:
<?php
return [
'connectionClass' => '\Elasticsearch\Connections\GuzzleConnection',
'connectionFactoryClass' => '\Elasticsearch\Connections\ConnectionFactory',
'connectionPoolClass' => '\Elasticsearch\ConnectionPool\StaticNoPingConnectionPool',
'selectorClass' => '\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector',
'serializerClass' => '\Elasticsearch\Serializers\SmartSerializer',
'sniffOnStart' => false,
'connectionParams' => [],
'logging' => true,
'logObject' => null,
'logPath' => storage_path() . '/logs/elasticsearch.log',
'logLevel' => Monolog\Logger::WARNING,
'traceObject' => null,
'tracePath' => storage_path() . '/logs/elasticsearch_trace.log',
'traceLevel' => Monolog\Logger::WARNING,
'guzzleOptions' => [],
'connectionPoolParams' => [
'randomizeHosts' => false
],
'retries' => null,
'hosts' => [
'xxx.xxx.xxx.xx:7200', //添加Elasticsearch的地址,默认是127.0.0.1:9200
]
];

(4) 修改model文件
在将要进行索引搜索的 Model 文件里,添加 BouncyTrait 的使用。 添加指定函数 documentFields ,设定要搜索出来的字段。
添加 BouncyTrait 的使用:
class AdvanceStudentModel extends BaseModel
{
use SoftDeletes;
use BouncyTrait; // 使用ElasticSearch全文索引 protected $table = '库名.表名';
protected $fillable = [
]; protected $hidden = [
]; protected $casts = [
]; // 操作数据库代码
//...... /**
* 在指定函数内
* 设置需要搜索出来的字段
*
* @return array
*/
public function documentFields()
{
return [
'id' => $this->id,
'class_id' => $this->class_id,
'student_name' => $this->student_name,
'achievement' => $this->achievement,
'accuracy_rate' => $this->accuracy_rate,
];
} }

(5) 使用
新建接口+写好路由:
lass UserElasticSearch extends Controller
{
public function run()
{ $logic = new AdvanceStudentLogic(Auth::user());
$ret = $logic->searchParams(); return $this->renderRetData(Common::SUCCESS, 'success',$ret); }
}
在logic文件中:
public function searchParams(){
//AdvanceStudentModel::all()->index(); // 全部设置为搜索索引。
$params = [
'query' => [
'match' => [
'student_name' => 'qin'
]
],
'size' =>
];
$advanceStudentMode = new AdvanceStudentModel();
$data = $advanceStudentMode::search($params)->paginate()->toArray();
return $data;
}
附上该插件原来github文档地址:
https://github.com/fadion/Bouncy
lumen框架使用Elasticsearch详解的更多相关文章
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- net平台下c#操作ElasticSearch详解
net平台下c#操作ElasticSearch详解 ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense Elasti ...
- spring框架 AOP核心详解
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...
- ElasticSearch-.net平台下c#操作ElasticSearch详解
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
- Django框架 之 querySet详解
Django框架 之 querySet详解 浏览目录 可切片 可迭代 惰性查询 缓存机制 exists()与iterator()方法 QuerySet 可切片 使用Python 的切片语法来限制查询集 ...
- TP框架I方法详解
TP框架I方法详解 I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:I('变量类型. ...
- Elasticsearch详解
Elasticsearch详解 Chandler_珏瑜 关注 5.8 2019.05.05 17:19* 字数 10971 阅读 1147评论 5喜欢 36 5.1 Lucene简介 Lucene ...
- Elasticsearch详解-续
Elasticsearch详解-续 Chandler_珏瑜 关注 7.6 2019.05.22 10:46* 字数 8366 阅读 675评论 4喜欢 25 5.3 性能调优 Elasticse ...
- 从原理到应用,Elasticsearch详解
简介 Elasticsearch(简称ES)是一个分布式.可扩展.实时的搜索与数据分析引擎.ES不仅仅只是全文搜索,还支持结构化搜索.数据分析.复杂的语言处理.地理位置和对象间关联关系等. ES的底层 ...
随机推荐
- 20140422 ALT+F8 四个强制类型转换
一.static_cast, dynamic_cast, const_cast http://www.cnblogs.com/chio/archive/2007/07/18/822389.html h ...
- sacnf遇到空格与回车问题
看scanf输入的是多个字符还是一个字符.如果是多个字符,遇空格和回车都不会结束输入:如果是一个字符,遇空格不会结束,遇回车结束输入.如:①#include<stdio.h> ...
- jquery操作html元素之(删除元素)
删除元素/内容 如需删除元素和内容,一般可使用以下两个 jQuery 方法: remove() - 删除被选元素(及其子元素) empty() - 从被选元素中删除子元素 jQuery remove( ...
- adb shell top 使用
adb shell top 一.其中相关参数: >adb shell top -h Usage: top [ -m max_procs ] [ -n iterations ] [ -d del ...
- [NOIP2005] 过河【Dp,思维题,缩点】
Online Judge:Luogu P1052 Label:Dp,思维题,缩点,数学 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子 ...
- 分布式唯一ID实现
ID生成的核心需求 全局唯一 趋势有序 为什么要全局唯一 避免ID冲突 著名的例子就是身份证号码,身份证号码确实是对人唯一的,然而一个人是可以办理多个身份证的,例如你身份证丢了,又重新补办了一张,号码 ...
- 【JZOJ6350】考试(test)
description analysis 对于\(n=0\)的点,直接模拟就好了 状压\(DP\),设\(f[i][j][S]\)表示到第\(i\)题.连续\(GG\)了\(j\)题.喝的饮料集合为\ ...
- Windows ipconfig
用法: ipconfig [/allcompartments] [/? | /all | /renew [adapter] | / ...
- jquery学习笔记(四):动画
内容来自[汇智网]jquery学习课程 4.1 显示和隐藏 在jQuery中使用 hide() 和 show() 方法来隐藏和显示 HTML 元素: hide()的语法形式:$(selector).h ...
- 10 行 Python 代码实现模糊查询/智能提示
10 行 Python 代码实现模糊查询/智能提示 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的 ...