自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hhhzua的专栏

我懒得告诉你我有多懒~

原创 php 使用 array_reduce 实现数组分组聚合

在处理关联数组时,经常需要对多维数组按指定字段分组聚合,下面封装了一个数组分组聚合方法:/** * 对数组进行分组聚合 * @param $array * @param $keys * @return $result */function array_group_by($array, $keys){ if(!is_array($keys) || count($keys) == 1) { $key = is_array($keys) ? array_first(

2020-07-29 16:04:12 26

原创 Mysql count 的多种使用方式性能比较

Mysql的count函数用于统计符合条件的记录数,常用的方式有:1、count(*)2、count(1)3、count(id)4、count(col)首先需要明确一点:count函数对于返回的结果集,一行行地判断,不会统计null值。初学者经常会纠结到底应该使用哪种方式做计数,实际上这四种计数方式是有很大差别的。count的原理是count(*)遍历整张表,不需要取出数据来计算,直接按行累计。count(1)遍历整张表,不需要取数,循环计数。count(id)遍历整

2020-07-29 02:51:44 12

原创 mysql count 实现复杂统计解析

mysql的count函数可以计算符合条件的记录条数,比如:select count(*) from users;执行结果:上面的sql只是将查询到的记录总数输出,count函数本身还可以配合if函数实现更复杂的计数:select count(if(status = 1, 1, null)) from users注意,count会将所有非null值计数,所以if里面不符合条件应该返回null。如果需要按某个字段计算去重后的数量,则需使用 distinct 关键字:select count

2020-07-29 01:42:40 41

原创 Elasticsearch实战:给博客打造全文检索

学习和使用Elasticsearch有一段时间了,项目中大量使用到了es,但对于我来说都是部分或者局部地去使用,所以得找个时间好好整理并且再完整时实践一下es,于是就有了这篇文章,本文将先简单介绍一下使用到的相关技术,然后再整体讲解实战内容。首先系统架构是LNMP,很简单的个人博客网站(逐步前行STEP),使用laravel框架,实现全文检索的引擎是elasticsearch,使用的分词工...

2020-07-07 22:39:36 151

原创 Elasticsearch 定制评分(自定义评分)
原力计划

Elasticsearch 的相似度算法被定义为检索词频率/反向文档频率, TF/IDF 。一. 相关概念:检索词频率:tf词 t 在文档 d 的词频( tf )是该词在文档中出现次数的平方根。tf(t in d) = √frequency检索词在该字段出现的频率?出现频率越高,相关性也越高。 字段中出现过 5 次要比只出现过 1 次的相关性高。反向文档频率:idf词 t 的逆向文档频率( idf )是:索引中文档数量除以所有包含该词的文档数,然后求其对数。idf(t) = 1 +

2020-07-06 23:02:35 97

原创 Laravel 发送邮件报错的解决方案:PHP Warning: stream_socket_enable_crypto(): SSL operation failed with code 1.

在搭建好私人邮箱服务器后,正好做了一个共享主机的产品,就需要在申请共享主机后给用户发通知,遇到这个报错:PHP Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /data/www/blog/

2020-06-19 02:14:07 187

原创 搭建共享服务器、共享虚拟主机并提供服务

一般来说,大家需要使用服务器都会选择一家云计算厂商,购买相应的服务器,并进行配置,然后搭建需要的服务,在没有彻底放弃这个云服务器之前,都得按年或者按月去续费,如果暂时用不着,但是又不想以后重新搭建一遍,就只纯属于“养着”它。我的小破站STEP,只为了满足简单的博客+技术实践的需求,平时负载极低,空闲了很多资源,所以探索着将资源租出去,可以满足想短时间使用服务器,或者和我一样希望降低维系服务器费用的朋友的需求,推出了一个新的模块:共享主机,初步尝试,还比较简陋,之后会不断完善。我将承担服务器的运维工作,帮

2020-06-19 01:53:30 75

原创 公共邮箱,共享邮箱,免费邮箱,匿名邮箱,临时邮箱,免费收信

在搭建私人邮件服务器之后,本人的邮件服务器并没有发挥实质的作用,所以,本着独乐乐不如众乐乐的原则,我把它扩展成一个共享邮箱,匿名邮箱,临时邮箱,免费收信的邮箱:网址:STEP免费邮箱 https://www.hezehua.net/email/index暂时只提供一个公共邮箱:alpha@hezehua.net每分钟更新收信列表,最多展示24小时内的邮件,因为是公共的,所以不要在发送敏感信息过来,如果需要多个邮箱的需求的话,可以反馈到email@hezehua.net 。...

2020-06-15 00:49:18 1001

原创 在centos服务器上安装配置私人邮箱,并在web端管理邮件

出于技术上的好(zhuang)奇(bi),我想搭建一个自己的邮箱服务器,这样的话,以后的个人资料上面可以带上一个自己域名的邮箱,再也不怕简历带qq邮箱被嫌弃了。首先是了解一下基本的邮件协议:POP3:邮局协议第三版本,主要用于从邮件服务器中检索邮件,并把所有的邮件信息立即下载到用户的计算机上。IMAP:互联网信息访问协议,可让用户在服务器上创建并管理邮件文件夹或邮箱、删除邮件、查询某封信的一部分或全部内容,完成所有这些工作时都不需要把邮件从服务器下载到用户的个人计算机上。SMTP:简单邮件传输协议

2020-06-15 00:40:20 856

原创 Elasticsearch 数据写入原理

1、elasticsearch 如何使文档可以被搜索为了支持全文检索而采用倒排索引,倒排索引包含一个有序列表,列表包含所有文档出现过的词项 ,对于每一个词项,包含了它所有曾出现过文档的列表。早期的倒排索引,会在文档变化时,重建新的索引,直到完成后替换掉旧的索引,这样新的变化就可以被搜索到。倒排索引具有不变性,这使得索引一旦被读入文件系统缓存,便会留在那里,只要有足够的空间,就可以使大部分请求直接命中缓存,很大地提升了性能,缺点是,如果有新的文档需要被搜索,只能重建整个索引。2、如何使用更好的方式实现

2020-05-14 02:07:25 124

原创 elasticsearch查询文档数量

查询文档数量时很常见的操作,一般可以直接使用count获取文档数,但是获取到数量信息,在【分页】应用中,意味着需要查询分页然后再查询总数。有另一种方法,可以让我们在一次查询中获取分页数据并得到总量。在搜索时,结果中的 hits.total 信息中会包含一个整数值表示文档数,当实际文档数小于10000时显示具体数量,当大于10000时,只显示10000并且包含另一个字段relation来表示是否...

2020-04-18 01:40:39 1466

原创 elasticsearch 去重计数

去重计数不是精确计数,数据量大的情况下会有误差,官方文档说的是,默认的情况下百万级数据会有5%的误差,实测如下:实际文档数:1924920去重计数:1912715误差率:(1924920 - 1912715)/ 1924920 = 0.006%0.6的误差率还能接受,如果需要更高的准确度的话,需要调整precision_threshold的值,默认值是100,可选值在0~40000,值...

2020-04-16 01:28:48 184

原创 Laravel核心技术解析(1)—— Composer 组件管理与自动加载

Composer作为PHP的组件化管理工具,实现了laravel框架的组件安装、更新、移除,以及自动加载功能,下面就深入解析这是如何实现的。使用Composer安装组件,首先需要创建composer.json文件,composer.json示例如下:我的个人博客:逐步前行STEP该文件定义了项目的基本信息以及所依赖组件的名称、版本、再执行composer install将所依赖组件安装...

2020-03-21 21:05:33 90

原创 filebeat 解析日志 并发送到Elasticsearch

起先,是出于了解我的网站的访问情况而做一个Nginx日志统计分析的功能,首选的就是ELK,但是,由于Logstash占用内存和CPU占有率都不是我的小服务器能承受的,转而将logstash换成filebeat,因为filebeat足够轻量级,我所需要的功能却都能满足:收集日志发送到ES按指定格式解析日志第1点是filebeat基本的功能,只要正确安装配置就能生效,在我的实践中,我不想要所...

2020-02-05 17:28:49 993

原创 Grok解析 centos 的 nginx 原生格式日志

centos系统的nginx原生格式如下:112.95.209.146 - - [13/Jun/2019:09:32:50 +0800] "GET /css/web.css HTTP/1.1" 200 27518 "http://www.hezehua.net/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, li...

2020-02-04 18:05:49 91

原创 PhpYun人才系统 整合 Ucenter 之后,会员注册提示”该 Email 已经被注册!“的解决方案

上一篇:PhpYun人才系统 与 Discuz 通过 Ucnter 整合会员中讲解了 的一些常见问题以及难点,接下来,记录一下打通会员之后遇到的问题。注册时会提示”该 Email 已经被注册“,phpyun因为不需要使用邮箱注册,所以会使用默认的邮箱地址注册,我们已经在Ucnter中设置了允许一个邮箱注册多个用户,按理来说不应该出现这样的问题的,确认设置没有问题了,那我们来过一下源码调试一下,看...

2020-01-19 02:11:29 110

原创 PhpYun人才系统 与 Discuz 社区 通过 Ucenter 做会员整合

phpyun人才系统作为一个专业的PHP招聘系统,可以很好地做本地化的线上招聘工作,天然适合配合社区系统做本地化社区,于是在搭建了phpyun人才系统之后,又搭建了discuz 社区。我的个人博客:逐步前行STEP问题来了,怎么让phpyun系统中的用户可以直接使用社区,或者说怎么让社区用户直接可以登录phpyun系统——Ucenter 就是为了解决这个问题而存在的。Ucenter(摘抄一...

2020-01-17 02:25:30 215

原创 Mysql update 使用join更新字段

在mysql应用中常常需要通过别的表的查询结果来更新本表,但很少会本表的查询结果再来更新本表的,下面就看看从本表查询结果更新本表应该怎么做吧。表classify:字段属性idint(11)namestring(255)表production:字段属性idint(11)classify_idint(11)现在表classi...

2019-12-30 01:59:40 52

原创 Laravel 怎么查看执行的Sql语句

1、如果是使用Eloquent ORM操作数据库的话,在sql查询时可以调用toSql()方法来获取sql: App\User::where('name','like','%hezehua%')->toSql();2、如果是执行原生Sql查询,则不能使用toSql()方法了,而是开启查询日志: DB::enableQueryLog(); DB::sselect("select * ...

2019-12-30 01:36:55 716

原创 Laravel服务提供者在平台短信服务中的应用

服务提供者是一个有效的将工具与业务解耦的方案,下面结合一个实用案例来解释服务提供者在实现提供基础服务的工具中的应用。服务提供者服务提供者是 Laravel 应用启动的中心,所有 Laravel 的核心服务都是通过服务提供者启动,通过使用服务提供者来管理类的依赖和执行依赖注入,可以很好地将一些底层服务与应用层代码解耦。短信服务短信服务对于一个系统来说,是基础的、通用的服务,不依赖于业务细节,...

2019-12-27 03:03:39 65

原创 初识搜索引擎

搜索引擎结构文本预处理分词 文本分词一般是先将文本分成独立的单词,然后取出标点符号,去除停止词,停止词就是一些使用频率高但是没有实际意义的词,比如:a、an、the、are等等语言处理对于英文来说,先是统一大小写,再对单词进行缩减,缩减过程主要有两种,一种是词干提取,即抽取词的词干或者词根,如:tional 缩减为 tion (去除形容词后缀)二是词形还原,即把词汇还原成一般形式,如:...

2019-12-17 00:41:42 36

原创 linux 环境下 openssl 生成ecdsa公、私钥

1、生成ecdsa私钥openssl ecparam -name prime256v1 -genkey -noout -out prime256v1-key.pem2、从ecdsa私钥提取公钥openssl pkey -in prime256v1-key.pem -pubout -out public.pem

2019-12-02 11:05:44 508

原创 Laravel 中使用Goutte + GuzzleHttp 组件设置 headers无效的原因探究以及解决方案

使用Goutte + GuzzleHttp 爬取网页时,如下代码中的请求头设置无效:$jar = CookieJar::fromArray([ "HMACCOUNT" => 'C0CDC28BD0110387', ], self::$host); $client = new GoutteClient(); $guz...

2019-11-07 03:28:11 724

原创 Elasticsearch 搜索数组字段

1、搜索 数组字段 tags 中同时存在元素 str_a、str_b{ "query": { "bool": { "filter": [ { "term": { "tags": "str_a" } }, { "term": { ...

2019-11-05 10:31:45 5510 3

原创 Elasticsearch 模糊搜索

Es 实现类似于mysql的模糊搜索:比如:对字段 keywords 进行 模糊搜索 带“愉”字的文档:{ "query": { "bool": { "filter": [ { "wildcard": { "keywords": "*愉*" } } ] }...

2019-11-01 20:14:55 2743

原创 docker容器内服务访问宿主机服务

我的个人博客:逐步前行STEP本文背景:操作系统:macOs笔者的docker虚拟机中运行了nginx、node服务用来部署一个前后端分离的网站,但是由于docker内的node服务运行效率极低,每次代码更新后也不会自动重新编译,所以准备将node服务部署在宿主机上。遇到问题:原本,nginx内配置了代理转发到node服务端口: location / { proxy_...

2019-10-17 19:58:33 1136

原创 MacVim配置目录树

NERDTree的作用就是列出当前路径的目录树首先需要使用Vundle插件管理器安装该插件:将" 目录树Plugin 'scrooloose/nerdtree' " git状态图标Plugin 'Xuyuanp/nerdtree-git-plugin' 写入~/.vimrc 中 call vundle#begin() 和 call vundle#end() 之间执行:Plu...

2019-10-17 02:34:11 384

原创 composer 中国镜像

使用以下代码将packagist源更换为中国镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com

2019-09-26 19:37:01 177

原创 docker清理磁盘占用

docker system pruneDocker 的 docker system prune 命令可以删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache

2019-09-26 11:53:09 58

原创 Mysql 加锁防并发

mysql加锁语句:selct * from table_name where id=1 for update使用方式以及注意事项:1、该语句必须在事务中执行才生效2、如果该语句中的查询未正确使用索引(不一定是主键),则该语句会锁全表3、如果该语句的查询中索引生效了,只会锁定查询的行4、该锁会在事务提交的时候释放...

2019-09-10 10:57:52 199

原创 记一次ElasticSearch 更改 mapping 字段类型的过程

首先,es不支持直接跟那个该mappinng,所以,更改 mapping 实质上是重建索引。操作步骤如下:1、为当前这个索引old_index设置一个别名my_index:curl -XPOST localhost:9200/_aliases -d ' { "actions": [ { "add": { "alias": "my...

2019-09-09 13:28:06 900

原创 Laravel + MongoDB 数组字段相关查询

1、$exist查询 是否存在这个字段//查询所有存在标签你字段的博客App\Blog::where(['tags'=>['$exist'=>true]])->get()1、$in查询 是否存在 【数组字段中的元素在列表中出现】//查询所有包含标签tag_a或者tag_b的博客App\Blog::whereRaw(['tags'=>['$in'=&g...

2019-09-03 13:37:40 761

原创 Dockerfile 中 配置安装 php 扩展

以下配置实现了 在docker环境中安装scwl中文分词的php扩展: # scwlRUN curl 'http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2' -o scws-1.2.3.tar.bz2 \ && tar -xjf scws-1.2.3.tar.bz2 \ && r...

2019-08-06 13:31:11 521

原创 Mysql 分组后组内排序按字段取最大或最小的数据

示例:1、将文章按类型的分组,并获取类型分组中最新的一篇文章select author,max(`updated_at`) as updated_at from articles group by category_id order by updated_at desc2、将文章按类型的分组,并获取类型分组中阅读量最小的一篇文章select author,min(`read_cnt...

2019-07-24 11:56:22 562

原创 单例测试phpunit

1、执行单例测试./vendor/bin/phpunit2、执行指定单例测试文件./vendor/bin/phpunit tests/BlogTest.php3、执行指定测试函数./vendor/bin/phpunit --filter testPostArticle4、执行指定文件的指定测试函数./vendor/bin/phpunit --filter testPos...

2019-07-19 15:13:23 135

原创 Laravel Collection 常用方法(1)

1、first返回集合第一个通过指定测试的元素:collect([1, 2, 3, 4])->first();// 1collect([1, 2, 3, 4])->first(function ($value, $key) { return $value > 2;});// 32、last返回集合中,最后一个通过指定测试的元素:colle...

2019-07-19 15:08:14 917

原创 编译安装MongoDB以及安装PHP的mongodb扩展

安装MongoDB1、下载源码在mongodb官方下载自己需要的版本:https://www.mongodb.com/download-center/community2、解压tar -zxvf mongodb-linux-x86_64-4.0.6.tgz3、创建配置文件#vi mongodb.conf写入:port=27017 #端口dbpath=/usr/local/mon...

2019-07-05 15:44:36 171

原创 使用匿名函数动态设置前置或者后置操作(装饰器模式的)

在维护另一个同事的代码时,由于代码量比较大而且封装程度低耦合高,维护起来不太顺手,就怕哪没注意把现有的逻辑改坏了,受到laravel-admin的保存回调功能的启发,想到了使用匿名函数来动态设置前置或者后置操作,也就是应用装饰器模式。比如,有一个delete函数是要删除一些商品,现在有个需求需要在删除前做一些检测,满足条件才可以删除,否则直接响应错误提示。不使用装饰器模式的话,只能往原来的代码...

2019-02-28 17:02:27 133

原创 Laravel-admin 使用表单动态地保存一个关联模型(源码探究到功能实现)

有时候我们使用Laravel-admin管理数据时,需要保存一些通过程序运算出来的数据,而不只是存储写在表单中的数据,也就是需要在保存数据前可以设置或改变数据。比如存在这么个需求:为了快速创建\管理一些测试数据,在Admin管理端创建一个用户账户的同时,创建相关的用户信息,用户订单、地址库等等一系列信息。以这个需求中用户关联的数据量来说,每个数据都手动输入的话,效率太低了,所以只能自动创...

2019-01-17 12:56:04 1949

原创 Laravel-admin 表单保存一对多关联数据(源码探究到功能实现)

由于Laravel-admin只支持表单保存一对一关联数据,要想保存一对多关联数据,还得从了解它的源码入手,看有没有空子可钻。首先,进入源码中的Form.php的store函数中看它是怎么保存表单数据的: public function store() { //为了节省篇幅,就省略无关代码吧...... DB::transaction(functio...

2019-01-17 12:07:06 3889

提示
确定要删除当前文章?
取消 删除