ElasticSearch分组聚合分页 ====== 类似SQL里面`group by`后分页输出列表。 这里需要分成两个步骤,一个是计算总数,第二个是输出列表。 ### 数据场景: 展示一个车主列表,输入关键字,可以通过车主的姓名、车辆的车牌来搜索出对应的车主数据列表。 添加一个车辆索引:`car`,里面包括车主姓名:`name`,车主id:`uid`,车牌:`car_no` 因为车主和车辆是一对多的关系,所以我们在车辆索引里面搜索车主的时候需要对uid去重,这里就用到了聚合。 ### 计算聚合桶的个数 方法就是用`cardinality`聚合和`sum_bucket`聚合结合起来计算。 ```json { "size": 0, "query": { "bool": { //这里用前缀搜索name和car_no "should": [ { "prefix": { "name": "113566" } }, { "...
 发布日期: 2020-10-28    分类: 数据库   浏览量: 4209
JetBrains IntelliJ IDEA 最新激活码 适用于JetBrains家族所有ide,包括IntelliJ IDEA ,PhpStorm,WebStorm,GoLand,PyCharm,DataGrip等 有人搭建了网站:https://jetbra.in/s 下载顶部提示的文件: ja-netfilter-all.zip,按照说明使用。 ja-netfilter-all.zip 下载提示的下面一行是一些收集的授权服务器。 ...
 发布日期: 2020-09-28    分类: 其他   浏览量: 4743
go从1.11版本开始,实验性的加入了`WebAssembly`的支持。 ## `hellow world`程序 ```go package main import "fmt" func main() { fmt.Println("Hello, WebAssembly!") } ``` 设置go编译`WebAssembly`环境变量值,`GOOS=js`和`GOARCH=wasm`。 设置方法有两种: - 修改默认变量值,执行命令:`go env -w GOOS=js GOARCH=wasm` - 编译的时候指定值:`cd`到项目根目录,执行命令:`GOOS=js GOARCH=wasm go build -o main.wasm` 这时将生成一个`main.wasm`文件,`.wasm`后缀的文件可以通过`http`设置合适的`Content-Type`http头来使用。 需要注意的一点是,只能编译`main`包,否则是不能在`WebAssembly`里面使用的。 **在浏览器里面运行`main.wasm`** ...
 发布日期: 2020-01-09    分类: Go   浏览量: 3947
material-ui的官方示例css都是用`makeStyles`创建的,用在`function`组件上。 但是如果我用的是`class`组件该怎么用呢?答案是用不了。 `makeStyles`只能用在`function`组件上,要在`class`组件上使用需要用`withStyles`。 用法如下: ```js import React, { Component } from 'react'; import { withStyles } from '@material-ui/core/styles'; import Button from '@material-ui/core/Button'; const styles = { root: { background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)', border: 0, borderRadius: 3, boxShadow: '0 3px 5px 2px rgba(255, 105...
 发布日期: 2020-01-03    分类: 前端   浏览量: 4628
场景是我们在本地电脑上安装了git,并初始化了一个测试仓库,但是并没有安装`gitlab`这种东西,那我们怎么可以通过`url`来`git pull`和`git push`仓库的内容呢。 这里以linux系统为例,在不再多添加其他依赖的情况下操作。 测试仓库路径`/home/dev/git/test`,初始化仓库的时候需要初始化成一个裸仓库`git init --bare`,否则需要做一些其他设置才能正常`push`。 1. 和git仓库在同一台电脑上面 这种情况可以用`file`协议来操作就可以,`git clone file:///home/dev/git/test`。 比如你在本机测试`Jenkins`的时候,配置`Pipeline`的git仓库,就可以这样填写仓库地址:`file:///home/dev/git/test`。 2. 在不同电脑上面操作git仓库 这种情况可以用ssh协议来操作,`git clone ssh://dev@192.168.2.199:/home/dev/git/test`,`dev`是登录用户。 `19...
 发布日期: 2019-07-22    分类: 其他   浏览量: 5278
protocol buffers(简称**protobuf**)是google搞的,是用来序列化数据的一种数据格式,类似于json、xml等这种。 本文其他概念不讲直接讲基本用法了。 首先需要定义数据结构,数据结构定义写在一个扩展名是`.proto`的文本文件里面,这个文件叫做`proto`文件。 protobuf的数据叫`message`,每一个消息都是一系列名值对,我们把他叫做`fields`,当然还有更复杂的结构,这就不在这里讨论了。 例如: ``` syntax = "proto3"; #版本 package tutorial; #包名 message Person { string name = 1; int32 id = 2; bool has_ponycopter = 3; } ``` `package`包名是为了避免不同项目的名字冲突。 上面就是我们定义的数据结构,然后用protobuf的编译器`protoc`去生成指定语言的数据访问代码,提供了简便的方法来操作整个结构的二进制数据。 pr...
 发布日期: 2019-06-18    分类: 后端   浏览量: 3876
**editor config**: ```javascript ClassicEditor .create( editorElement, { ckfinder: { uploadUrl: '/ckfinder/upload.php' #配置上传地址 } } ) .then( ... ) .catch( ... ); ``` `uploadUrl` response format,服务器响应格式: ```json { "uploaded ": true, "error": { "message": "no error" }, "url": "https://example.com/upload/images/213432434.png" } ``` ```json { "uploaded ": false, "error": { "message": "file extension not allow" ...
 发布日期: 2018-11-23    分类: Javascript   浏览量: 6660
利用RabbitMQ来做一个RPC的客户端和服务端。 输出斐波那契数列为例子。 rpc_server.php: ```php ...
 发布日期: 2018-11-15    分类: 其他   浏览量: 5291
Routing那一文是日志系统还是有不足的地方,如果我们想既基于选择和发送消息的来源来接收日志呢? 比如像Linux的`syslog`一样,可以基于消息的级别(info/warn..),产生消息的来源(auth/cron)来记录日志。 要实行这样的功能,就需要`topic`类型的exchange了。 `topic`类型的exchange,`routing_key`参数值不能随便设置,需要是一个点(`.`)分隔的词列表,词可以随意设置,一般是使用有意义的内容。比如`stock.usd.nyse`,数据长度是最大是255个字符。 `binding key`也是同样的格式,可以有两个特殊的字符: - `*`:匹配单个词。 - `#`:匹配0个或多个词。 比如`*.orange.*`、`lazy.#`,这里的词指的是点分隔的完整字符。 生产者: ```php ...
 发布日期: 2018-11-15    分类: 其他   浏览量: 4592
接着上篇发布-订阅的日志记录,如果只订阅消息的子集,比如,只记录错误日志到硬盘,全部的消息打印出来,那么就需要用到这里要讲的内容了。 `exchang`的绑定操作可以传递一个叫`routing_key`的额外参数,这里把它称为`binding key`。 ```php $binding_key = 'black'; $channel->queue_bind($queue_name, $exchange_name, $binding_key); ``` `binding key`依赖于`exchange`的类型,`fanout`类型是会忽略这个值的。 在日志系统里面,如果需要根据消息级别过滤消息,就是不同的订阅者收到不同级别的错误日志消息会有不同的处理方式。 之前用的`fanout`exchange类型就不行了,这个类型只能广播消息,而没有其他的灵活性了。 这里的需求需要用`direct`exchange类型来代替,这种类型的算法是消息会推送到`binding key`和`routing key`相同的队列。 > 这里`binding ke...
 发布日期: 2018-11-15    分类: 其他   浏览量: 4910