ES实现分组查询Java API

需要对ES中的数据先过滤查询,然后分组统计,现将本人的示例代码贴在下,希望对你有用(搜索中加聚合)

/**
 * 组合查询条件:
 * 类似sql语句 select deviceId, count(1) from table where code = '0' group by deviceId
 */
private BoolQueryBuilder getSearchBuilder(Log log) {
	BoolQueryBuilder searchBuilder = transportClient.prepareSearch();
	BoolQueryBuilder builder = QueryBuilders.boolQuery();
	//类型sql的where条件
	if (!StringUtils.isBlank(log.getDeviceId())) {
        builder.must(QueryBuilders.matchQuery("deviceId",log.getDeviceId()));
    }
    if (!StringUtils.isBlank(log.getCode())) {
        if (SUCCESS.equals(log.getCode())) {
            //查询所有的请求成功的数据                		
            builder.must(QueryBuilders.matchQuery(“code”,log.getCode()));
        } else {
            //查询所有的失败的数据
            builder.mustNot(QueryBuilders.matchQuery("code", SUCCESS));
        }
    }
    //请求开始时间和请求结束时间
    String stmStart = log.getStmStart();
    String stmEnd = log.getStmEnd();

    if (!StringUtils.isBlank(stmStart) || !StringUtils.isBlank(stmEnd)) {
        stmStart = StringUtils.isBlank(stmStart) ? stmStart : stmStart + ZERO;
        stmEnd = StringUtils.isBlank(stmEnd) ? stmEnd : stmEnd + ZERO;
        rangeBuilder rangeBuilder = QueryBuilders.rangeQuery(STM);
        rangeBuilder.from(stmStart);
        rangeBuilder.to(stmEnd);
        builder.must(rangeBuilder);
    }

    searchBuilder.setQuery(builder);
    //添加分组,deviceCount为别名,deviceId为要分组的字段
    //200000为最大的分组显示条数,默认为10条
    SearchRequestBuilder termsBuilder = AggregationBuilders.terms("deviceCount").field(“deviceId”).size(200000);
    searchBuilder.addAggregation(termsBuilder);

    //此处用于使用聚合函数分页无效,需手动分页
    /*
    Integer pageNo = log.getPage();
    Integer limit = log.getLimit();
    if (null != pageNo && null != limit) {
    searchBuilder.setFrom((pageNo -1) * limit).setSize(limit);
    }
    */
    return searchBuilder;
}

 

获取查询分组后数据 继续阅读ES实现分组查询Java API

离职社保公积金问题

背景:南京离职到合肥工作

社保:
转移前需要原单位将社保进行停保,同时在合肥需要有社保账户并已缴纳社保一月,然后去南京的社保局办理社保转出。
地址:南京市中华路505号,秦淮区社保中心
材料:本人身份证,本人的银行卡(持卡人是本人)
时间:每个月的5-25号,工作时间通常是8:30-11:30/13:30-17:00
操作:取号,柜台办理,然后会给到你两个单子,一个黄色,一个白色,将单子给到现在合肥的公司人事,合肥的人事会让你填写转移申请表,填写后,合肥的单位人事会帮到你办理。

公积金: 继续阅读离职社保公积金问题

kafka2ES索引

背景:

给日志中增加了新的属性,需要新建索引,以便让新的索引生效,同时将旧索引指向到新索引中。

1 新建索引和属性(包含原已存在属性)脚本如csindex.sh,内容如下 :

curl -XPUT 'http://ip:9200/newindex-2018-03?pretty' -d
'{	
	"settings":{
		"number_of_shards":5,
		"number_of_replicas":1
	},
	"mappings": {
		"xxPlatformLog": { 
			"_all": { "enabled": true },                         	
			"properties": { 				
				"uid":{"type":"string","index":"not_analyzed","store":"yes"},
				"account":{"type":"string","index":"not_analyzed","store":"yes"},
				"respkg":{"type":"string","index":"analyzed","store":"yes"}
			}
		}
	}
}'

2 删除旧索引,指向添加新索引

curl -XPOST http://xx:9202/_aliases -d'{"actions":[{"remove":{"index":"oldindex-2018-02","alias":"indexaliases"}},{"add":{"index":"newindex-2018-03","alias":"indexaliases"}}] }'

SpringCloud传参null

使用Eureka,

FeignClient
spring-cloud-starter-openfeign

在FeignClient那边获取对象属性值时都是null,经查找是由于接口上使用了@RequestBody,但是实现接口的类方法上没有加注解,加上@RequestBody即可
如下所示:

接口:

public interface IXxService {
  @RequestMapping(value = "/reportVbox", method = RequestMethod.GET)
  String reportXx(@RequestBody  XxDto dto);
}

实现类:

@RestController
public class XxServiceImpl implements IXxService {
  @Override
  public String reportXx(@RequestBody XxDto dto) {
    ...
  }
}

Springboot入门学习笔记

学习笔记

启动运行springboot

1 可以在目录下运行命令:mvn spring-boot:run

2 mvn install 然后到target里面运行

java -jar speaker-platform-service-1.0-SNAPSHOT.jar --spring.profiles.active=test

 

项目配置-端口和上下文

server.port=8081
server.servlet.context-path=/myxxx

 

参数使用

girl.age: 18
girl.size: L  

配置里面使用配置属性

content: "size: ${girl.size}, age: ${girl.age}" 

使用bean配置(放置类中),可以创建一个girl-prod/dev.properties

@Componet
@ConfigurationProperties(prefix = "girl")//前缀
@PropertySource("classpath:girl-${spring.profiles.active}.properties,encoding = "UTF-8"")
public class GirlBean{    
	private Integer age;    
	private String size;    
	//Geter Seter

} 

 

使用如下

@Autowired
private GirlBean girlBean;  

 

多环境配置:修改application.yml,推荐使用yml文件

application.yml application-dev.yml application-prod.yml

spring:    
	profiles:        
		active: dev #动态

指定运行环境 继续阅读Springboot入门学习笔记

使用navicat导入excel数据,提示:必须输入表名

如标题所示,导入失败。(之前都可以,这次怎么不行了?纳闷。。。)

此时,我们打开excel文件

如上图所示,单元格之前是没有框线的。

解决方法:将数据用框线框起来,保存后,再导入即可进入到下一步。(如下图所示)

后台开发编写接口文档(范例)

接口文档示例

包含:

1标题(用于什么的功能、模块的)

2修订记录(标识出修订的记录)

3接口目录

4接口说明(地址,入参、出参、数据格式等)

下面为正文

 

修订记录

版本编号 变化状态 变更说明 日期 变更人
V1.0.0 C 创建文档 2018-8-7 – xxx

变化状态:[C] 创建、[A] 增加、[M] 修改、[D] 删除

目录

  1. 接口设计
  2. 1.1 账号绑定接口
  3. 1.1.1 接口说明
  4. 1.1.2 请求参数
  5. 1.1.3 响应参数
  6. 1.1.4 请求示例
  7. 错误码列表

\1. 接口设计

1.1 账号绑定接口

1.1.1 接口说明

将用户账号与设备进行绑定。

接口方式https + post

接口处理方式:同步

接口地址$BASE_URL /xx/device/bind

1.1.2 请求参数

Content-Type: application/json

参数名称 参数类型 是否必需 描述
userAccount String(64) 登录账号
partnerId String(16) 应用编号,用于区分调用方应用,该编号由后台统一分配。
params JSON 请求参数:请求消息内容,JSON格式。 params的定义为 { 其它参数 }

 

params参数 继续阅读后台开发编写接口文档(范例)