技术标签: 对比mysql ElasticSearch 联合查询(join) ES查询 嵌套查询
package com.lenovo.liebao.biapp.data.util;
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.script.ScriptType;
import org.elasticsearch.script.mustache.SearchTemplateRequest;
import org.elasticsearch.script.mustache.SearchTemplateResponse;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregation;
import org.elasticsearch.search.aggregations.metrics.Sum;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 类描述:Elasticsearch 工具类
*/
public class ESUtil {
public static String index = "wpc";
static RestHighLevelClient client = null;
static{
init();
}
public static void init(){
RestClientBuilder lowLevelRestClient = RestClient.builder(
new HttpHost("172.17.172.94", 9201, "http"),
new HttpHost("172.17.172.94", 9202, "http"));
//High Level Client init
client =
new RestHighLevelClient(lowLevelRestClient);
}
/**
* 方法描述:查询elasicsearch
* @param index 索引名(库名)
* @param sourceBuilder 查询条件
* @return
*/
public static Object query(String index, SearchSourceBuilder sourceBuilder){
return query(index,sourceBuilder, false);
}
/**
* 方法描述:查询elasicsearch
* @param index 索引名(库名)
* @param sourceBuilder 查询条件
* @param isCount 是否统计个数
* @return
*/
public static Object query(String index, SearchSourceBuilder sourceBuilder, boolean isCount){
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.source(sourceBuilder);
List<Object> list = new ArrayList<>();
try {
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
if(!isCount){
//正常查询
SearchHit[] hits = response.getHits().getHits();
for(SearchHit hit : hits){
Map<String, Object> doc = hit.getSourceAsMap();
list.add(doc);
}
}else{
//统计个数
return Integer.parseInt(""+response.getHits().getTotalHits().value);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
/**
* 方法描述:聚合查询
* @param index 索引名(库名)
* @param sourceBuilder 查询条件
* @return
*/
public static Object agg(String index, SearchSourceBuilder sourceBuilder){
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.source(sourceBuilder);
List<Object> list = new ArrayList<>();
try {
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
Map<String, Object> map = new HashMap();
for(Aggregation agg : response.getAggregations().asList()){
map.put(agg.getName(), ((NumericMetricsAggregation.SingleValue)agg).value());
}
list.add(map);
return list;
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
/**
* 方法描述:分组+聚合elasicsearch
* @param index 索引名(库名)
* @param sourceBuilder 查询条件
* @return
*/
public static Object groupAndAgg(String index, SearchSourceBuilder sourceBuilder, String[] colNames){
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.source(sourceBuilder);
List<Object> list = new ArrayList<>();
try {
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
Terms groupAggs = response.getAggregations().get("group_by");
for(Terms.Bucket bucket: groupAggs
文章浏览阅读1.1k次。信息安全基础技术密码学威胁、安全属性与密码学技术密码学发展古典密码(古代——19世纪末)近代密码(20世纪初——1949)20世纪初到1949年现代密码(1949——1976)公钥密码(1976—— )加密与解密明文(Plaintext)密文(Ciphertext)或密报(Cryptogram)加密员或密码员(Cryptographer)截获加密(Encryption )解密(Decryption )对称密码算法非对称密码算法混合加密哈希函数MD5算法SHA-1算法比较SHA-1/MD5数字签名数字签名的应_nisp一级导图
文章浏览阅读728次。request对象和request对象 request对象是来获取请求消息,response对象是来设置响应消息requset对象继承体系结构:ServletRequest -- 接口 | 继承HttpServletRequest -- 接口protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//下文中的req._webstem中res
文章浏览阅读178次。为什么80%的码农都做不了架构师?>>> ..._jb51 python
文章浏览阅读291次。在 WSL 中运行 Linux GUI 应用已成为现实,微软 WSL 团队产品经理 Craig Loewen 在推特展示了其团队为 WSL 添加对 Linux GUI 应用的支持,并表示越来越接近初始预览阶段,将会在未来几个月内发布的 Windows Insiders 预览版本中引入。当前的 WSL 支持运行命令行 Linux 应用,通过 Linux GUI App Integration(WSL...
文章浏览阅读1.6k次。前阵时间写了一遍关于 "layui+vue实现select动态加载后台数据" 的文章,用setTimeout +layui.form.render() 的方式来局部刷新的方式重新渲染页面,代码如下var new Vue({ el:"#app", data:{ items:null }, mounted:function () { this...._layui.form.render()不生效
文章浏览阅读774次。2019独角兽企业重金招聘Python工程师标准>>> ...
文章浏览阅读8.3k次。集可以被视为自定义段,但与维度字段不同,它们始终是二进制的。换句话说,您要么在 “集” 中,要么不在 “集” 中。除了这个限制之外,几乎任何东西都可以创建 “集” 。您可以通过选择放置在 “集” 中的各个维度成员创建,或基于条件创建 “集” ,还可以使用顶部或底部创建 “集” ,等等。 如何在 Tableau 中创建集? 与创建筛选器的方法类似,我们可以在 Tableau 中通过几..._tableau底部集
文章浏览阅读1.3k次。docker run -d --name=tinymediamanager \-v /share/data/docker/tinymediamanager/config:/config \-v /share/data/docker/tinymediamanager/media:/media \-e GROUP_ID=0 -e USER_ID=0 -e TZ=Europe/Madrid \-p 5800:5800 \-p 5900:5900 \romancin/tinymediamanager:l_mgstage
文章浏览阅读2.6w次,点赞20次,收藏78次。Ubuntu apt-get换源一、更换镜像源1. 备份源配置文件>> cd /etc/apt/>> cp sources.list sources.list.old2. 打开阿里云镜像站:OPSX阿里镜像站,找到Ubuntu,点击右边的帮助,查看对应版本的镜像源信息阿里镜像站相关配置相关配置3.用g..._ubuntu apt换源
文章浏览阅读890次。Follow up for problem "Populating Next Right Pointers in Each Node".What if the given tree could be any binary tree? Would your previous solution still work?Note:You may only use constant extr_leetcode117
文章浏览阅读4.4k次。平安城市 平安城市是一个超巨型、强综合性的城市管理系统,通过三防系统(技防系统、物防系统、人防系统)和管理系统共同建设城市的平安和谐。不仅需要满足治安管理、社会防控、道路管理、人员管理、应急处理等需求,而且还要兼顾灾难预警、安全生产监控等方面对图像监控的需求,同时还要考虑各系统之间的联动平安城市的建设,平安城市最早在北京宣武区、山东济南、浙江杭州和江苏苏州四个城市开始做试点。2004年......_平安城市,天网工程和雪亮工程的区别
文章浏览阅读1.3k次。【IT168厂商动态】近年来,物联网作为我国战略发展新兴行业,物联网概念持续升温,作为推进物联网发展的关键技术之一RFID无线射频技术,也随之形成高速发展和广泛应用的局面。POSTEK博思得作为国内领先条码/RFID打印机品牌,其公司拥有众多打印机方面的国家专利技术,近期研发上市的RFID标签打印机TXr系列RFID工业标签打印机,将适应我国物联网发展的需求,广泛应用在智能物流、智能交通、智能农业..._postek rfid 二次开发