首页 文章 精选 留言 我的

精选列表

搜索[资源操作],共10025篇文章
优秀的个人博客,低调大师

docker 基本操作Ⅲ

1 数据卷备份恢复 - 我们一般用的最多的是把容器和本地宿主机做目录映射直接存在本地,但是还有一种就是数据卷的备份与恢复,如下就来介绍: 先来一副图来了解一下数据卷的恢复与备份 宿主机也就是我们的服务器分享一个/data/backup/ 目录,本地的这个backup目录和新建容器内的backup相互映射,而我们现在的新建容器挂载了数据卷容器的/data/ 也就是意味着数据卷的data目录和容器的data目录数据是一致的,现在两两互通,下面也就是把新建容器中的data目录中的数据copy到backup中就可以了!这样就完成了真实的备份! - 备份(本地创建备份目录) 1 2 3 mkdir /data/backup dockerrun--volumes-fromtestvol- v /data/backup/ : /backup centos tar cvf /backup/data . tar /data/ 说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的 /data/backup/ 目录挂载到该容器的 /backup 下,这样在容器中 /backup 目录里面新建的文件,我们就可以直接在 /data/backup/ 目录中看到了。然后再把 /data/ 目录下面的文件打包到成data. tar 文件放到 /backup 目录下面。 恢复: - 思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。 1 2 dockerrun-itd- v /data/ --nametestvol2centos bash 新建数据卷容器 dockerrun--volumes-fromtestvol2- v /data/backup/ : /backup centos tar xf /backup/data . tar // 挂载数据卷新建容器,并解包 2 Docker网络模式 - host模式,使用docker run时使用--net=host指定docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机ip - container模式,使用--net=container:container_id/container_name多个容器使用共同的网络,看到的ip是一样的 - none模式,使用--net=none指定这种模式下,不会配置任何网络 - bridge模式,使用--net=bridge指定默认模式,不用指定默认就是这种网络模式。这种模式会为每个容器分配一个独立的Network Namespace。类似于vmware的nat网络模式。同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的。 - 现在我们默认使用的是bridge,容器本身和外部是不能通信的,那我们怎么让容器与外界通信呢?如下来介绍怎么访问外部 首先使用centos镜像新建一个容器,然后在该容器中安装nginx服务,并启动 [root@chy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 08dd3d386d00 centos7 "bash" 3 seconds ago Up 3 seconds pensive_brattain [root@chy ~]# docker exec -it 08dd3d386d00 bash //进入容器 [root@08dd3d386d00 /]# yum install -y epel-release //需要先安装epel扩展源 [root@08dd3d386d00 /]# yum install -y nginx //开始安装nginx [root@08dd3d386d00 /]# systemctl start nginx //启动nginx,启动是出现了一个报错 Failed to get D-Bus connection: Operation not permitted 这个是这是因为dbus-daemon没有启动,解决该问题可以这样做 [root@chy ~]# docker rm -f 794b4d5ed700 794b4d5ed700 先删除这个容器之后在启动容器 [root@chy ~]# docker run -itd --privileged -e "container=docker" -p 808:80 centos7 /usr/sbin/init //启动容器时,要加上--privileged -e "container=docker" ,并且最后面的命令改为/usr/sbin/init 5896f605586a5697f5bd8e8ae16e207f6716a70adf1c422c2da8909a2496c8df [root@5896f605586a /]# systemctl start nginx //启动nginx时就没有问题了 [root@08dd3d386d00 /]# rpm -qa nginx //查看nginx的rpm包 nginx-1.10.2-2.el7.x86_64 2 再把该容器导成一个新的镜像(centos_nginx),然后再使用新镜像创建容器,并指定端口映射。 1 2 3 4 5 6 7 8 [root@chy~] #dockercommit-m"installnginx"-a"chylinux"08dd3d386d00centos7//将容器导成镜像 sha256:8170b76bc6a875bebfa1860dcc3ad9bade4640e0dc73421bcd30ebe80bc1f973 [root@chy~] #dockerimages//查看成功 REPOSITORYTAGIMAGEIDCREATEDSIZE centos7latest8170b76bc6a8Aboutaminuteago569MB [root@chy~] #dockerrun-itd-p808:80centos7bash////-p可以指定端口映射,本例中将容器的80端口映射为本地的808端口(这里是容器的端口映射为本地的端口,本地的端口自定义即可) 794b4d5ed700cfaffa0cbe6e8755cbf1b072e0b298e8ade609b6accd6430cb9e [root@chy~] #curllocalhost:808本地可以访问了 测试外部机器访问内部的容器 1 [root@chy01~] #curl192.168.212.10:808//访问成功 3 配置桥接网络 - 为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 [root@chy~] #cd/etc/sysconfig/network-scripts/ [root@chynetwork-scripts] #cpifcfg-ens33ifcfg-br0 [root@chynetwork-scripts] #viifcfg-br0 TYPE=Bridge // 将这个变为bridge BOOTPROTO=static DEFROUTE= yes PEERDNS= yes PEERROUTES= yes IPV4_FAILURE_FATAL=no IPV6INIT= yes IPV6_AUTOCONF= yes IPV6_DEFROUTE= yes IPV6_PEERDNS= yes IPV6_PEERROUTES= yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=br0 // 改为网卡的名称 UUID=9921878c-a733-4564-8737-ee6af48d5015 DEVICE=br0 // 改为网卡的名称 ONBOOT= yes IPADDR=192.168.212.10 NETMASK=255.255.255.0 GATEWAY=192.168.212.2 DNS1=119.29.29.29 [root@chynetwork-scripts] #viifcfg-ens33//之后在编辑ens33 TYPE=Ethernet BOOTPROTO=static DEFROUTE= yes PEERDNS= yes PEERROUTES= yes IPV4_FAILURE_FATAL=no IPV6INIT= yes IPV6_AUTOCONF= yes IPV6_DEFROUTE= yes IPV6_PEERDNS= yes IPV6_PEERROUTES= yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 #UUID=9921878c-a733-4564-8737-ee6af48d5015//需要注释 DEVICE=ens33 ONBOOT= yes #IPADDR=192.168.212.10//需要注释 #NETMASK=255.255.255.0//需要注释 #GATEWAY=192.168.212.2//需要注释 #DNS1=119.29.29.29//需要注释 BRIDGE=br0增加刚修改的ifcfg-br0 [root@chynetwork-scripts] #systemctlrestartnetwork//重启网卡 [root@chynetwork-scripts] #ifconfig//查看到用的是一个网卡(即ens33与bro用的一个网卡) br0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet192.168.212.10netmask255.255.255.0broadcast192.168.212.255 inet6fe80::4228:9a24:3718:ba9eprefixlen64scopeid0x20<link> ether00:0c:29:70:77:62txqueuelen1000(Ethernet) RXpackets36bytes3544(3.4KiB) RXerrors0dropped0overruns0frame0 TXpackets28bytes2456(2.3KiB) TXerrors0dropped0overruns0carrier0collisions0 docker0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet172.17.0.1netmask255.255.0.0broadcast0.0.0.0 inet6fe80::42:77ff:fe70:d168prefixlen64scopeid0x20<link> ether02:42:77:70:d1:68txqueuelen0(Ethernet) RXpackets3bytes96(96.0B) RXerrors0dropped0overruns0frame0 TXpackets11bytes806(806.0B) TXerrors0dropped0overruns0carrier0collisions0 - 安装pipwork pipework是由Docker的工程师Jérme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用. 1 2 3 4 5 6 7 8 9 10 11 12 [root@chy~] #gitclonehttps://github.com/jpetazzo/pipework [root@chy~] #cdpipework/进入到目录下 [root@chypipework] #cppipework/usr/local/bin/ [root@chypipework] #dockerrun-itd--net=nonecentos7bash//启动一个容器 a9655415cca39879f21d51ca8a658aeb2d66ba3d6f9cb35cf81fa7d0cc00f308 [root@chypipework] #dockerexec-ita96554bach//进入容器 [root@a9655415cca3/] #ipadd 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNqlen1 link /loopback 00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1 /8 scopehostlo valid_lftforeverpreferred_lftforever 查看没有地址,现在来配置一个Ip地址 pipwork配置ip地址并且测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [root@chypipework] #pipeworkbr0a9655415cca3192.168.212.18/24@192.168.212.2//br0是网卡的名称,后面是容器的名字(id也可以)后面跟给容器设置的ip地址与子网掩码,@后面跟的是网关 [root@chypipework] #dockerexec-ita96554bash [root@a9655415cca3/] #ipadd 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNqlen1 link /loopback 00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1 /8 scopehostlo valid_lftforeverpreferred_lftforever 14:eth1@if15:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscnoqueuestateUPqlen1000 link /ether 46:6f:8b:5b:28:17brdff:ff:ff:ff:ff:fflink-netnsid0 inet192.168.212.18 /24 brd192.168.212.255scopeglobaleth1 valid_lftforeverpreferred_lftforever 如上已经查看到有设置的ip地址 [root@a9655415cca3/] #pingbaidu.com//在容器中是可以 PINGbaidu.com(220.181.57.217)56(84)bytesofdata. 64bytesfrom220.181.57.217:icmp_seq=1ttl=128 time =5.57ms 64bytesfrom220.181.57.217:icmp_seq=2ttl=128 time =5.69ms 现在来进行测试,用一台chy01的机器测试 [root@chy01~] #ifconfig ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet192.168.212.11netmask255.255.255.0broadcast192.168.212.255 inet6fe80::243b:ddac:7a2b:a5bprefixlen64scopeid0x20<link> ether00:0c:29:13:b3:3btxqueuelen1000(Ethernet) RXpackets96358bytes6128391(5.8MiB) RXerrors0dropped0overruns0frame0 TXpackets11801bytes742577(725.1KiB) TXerrors0dropped0overruns0carrier0collisions0 [root@chy01~] #ping192.168.212.18 PING192.168.212.18(192.168.212.18)56(84)bytesofdata. 64bytesfrom192.168.212.18:icmp_seq=1ttl=64 time =1.17ms 64bytesfrom192.168.212.18:icmp_seq=2ttl=64 time =0.452ms 64bytesfrom192.168.212.18:icmp_seq=3ttl=64 time =0.584ms (如上用其它的机器也可以 ping 通) 这个就是咱们使用pipework软件所搭建起来的bridge模式,当然,这种模式才是真正的网桥模式,官方的bridge模式我认为就是虚拟机下面的NAT模式! 希望看过的童鞋多多指教,谢谢! 本文转自我不是瘦子51CTO博客,原文链接:http://blog.51cto.com/chy940405/1982433,如需转载请自行联系原作者

优秀的个人博客,低调大师

spring 操作elasticsearch

package com.gooddeep.dev.elasticsearch.commons.dao; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.elasticsearch.action.ActionFuture; import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest; import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.cluster.health.ClusterHealthStatus; import org.elasticsearch.common.text.Text; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.highlight.HighlightBuilder; import org.elasticsearch.search.highlight.HighlightBuilder.Field; import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.SortOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.SearchResultMapper; import org.springframework.data.elasticsearch.core.query.Criteria; import org.springframework.data.elasticsearch.core.query.CriteriaQuery; import org.springframework.data.elasticsearch.core.query.DeleteQuery; import org.springframework.data.elasticsearch.core.query.IndexQuery; import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.data.elasticsearch.core.query.StringQuery; import org.springframework.stereotype.Component; import com.gooddeep.dev.core.helper.PropertyHelper; import com.gooddeep.dev.core.helper.UuidHelper; import com.gooddeep.dev.core.model.BasePage; import com.gooddeep.dev.elasticsearch.commons.model.EsBaseBean; import com.gooddeep.dev.elasticsearch.commons.service.EsBaseService; @Component("esBaseDao") public abstract class EsBaseDaoImpl<T> implements EsBaseDao<T> { private Logger logger = LoggerFactory.getLogger(EsBaseService.class); @Autowired private ElasticsearchTemplate elasticsearchTemplate; @Autowired private Client esClient; /** * 插入或等新,需要有id,id需要自己生成 * * @param tList * @return */ public boolean insertOrUpdate(List<T> tList) { List<IndexQuery> queries = new ArrayList<IndexQuery>(); for (T t : tList) { String id = ((EsBaseBean) t).getId(); if (id == null) { id = UuidHelper.getRandomUUID(); ((EsBaseBean) t).setId(id); } IndexQuery indexQuery = new IndexQueryBuilder().withId(id).withObject(t).build(); queries.add(indexQuery); } elasticsearchTemplate.bulkIndex(queries); return true; } /** * 插入或更新 * * @param t * @return */ public boolean insertOrUpdate(T t) { String id = ((EsBaseBean) t).getId(); if (id == null) { id = UuidHelper.getRandomUUID(); ((EsBaseBean) t).setId(id); } try { IndexQuery indexQuery = new IndexQueryBuilder().withId(id).withObject(t).build(); elasticsearchTemplate.index(indexQuery); return true; } catch (Exception e) { logger.error("insert or update user info error.", e); return false; } } /** * 删除 * * @param id * @return */ public boolean deleteById(String id) { try { elasticsearchTemplate.delete(getEntityClass(), id); return true; } catch (Exception e) { logger.error("delete " + getEntityClass() + " by id " + id + " error.", e); return false; } } /** * 删除ids * @param idList * @return */ @Override public boolean deleteByIds(List<String> idList) { try { CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); criteriaQuery.setIds(idList); elasticsearchTemplate.delete(criteriaQuery, getEntityClass()); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 根据条件查询 * @param filedContentMap 不能为null * @return */ public boolean deleteByQuery(Map<String,Object> filedContentMap) { try { DeleteQuery dq = new DeleteQuery(); BoolQueryBuilder qb=QueryBuilders. boolQuery(); if(filedContentMap!=null) for (String key : filedContentMap.keySet()) {//字段查询 qb.must(QueryBuilders.matchQuery(key,filedContentMap.get(key))); } dq.setQuery(qb);; elasticsearchTemplate.delete(dq, getEntityClass());; return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 检查健康状态 * * @return */ public boolean ping() { try { ActionFuture<ClusterHealthResponse> health = esClient.admin() .cluster().health(new ClusterHealthRequest()); ClusterHealthStatus status = health.actionGet().getStatus(); if (status.value() == ClusterHealthStatus.RED.value()) { throw new RuntimeException( "elasticsearch cluster health status is red."); } return true; } catch (Exception e) { logger.error("ping elasticsearch error.", e); return false; } } /** * 条件查询 * * @param searchfields * 查询字段 * @param filedContentMap * 字段和查询内容 * @param sortField * 排序 字段 * @param order * 排序 * @param from * @param size * @return */ @Override public BasePage<T> queryPage(Map<String,Object> filedContentMap, final List<String> heightFields, String sortField, SortOrder order, BasePage<T>basePage) { Field[] hfields=new Field[0]; if(heightFields!=null) { hfields = new Field[heightFields.size()]; for (int i = 0; i < heightFields.size(); i++) { hfields[i] = new HighlightBuilder.Field(heightFields.get(i)).preTags("<em style='color:red'>").postTags("</em>").fragmentSize(250); } } NativeSearchQueryBuilder nsb = new NativeSearchQueryBuilder().withHighlightFields(hfields);//高亮字段 if (sortField != null && order != null)//排序 nsb.withSort(new FieldSortBuilder(sortField).ignoreUnmapped(true).order(order)); if (basePage != null)//分页 nsb.withPageable(new PageRequest(basePage.getPageNo(), basePage.getPageSize())); BoolQueryBuilder qb=QueryBuilders. boolQuery(); for (String key : filedContentMap.keySet()) {//字段查询 qb.must(QueryBuilders.matchQuery(key,filedContentMap.get(key))); } //userKey=78e48b85e94911e0d285f4eec990d556 //fa6e9c5bb24a21807c59e5fd3b609e12 nsb.withQuery(qb); SearchQuery searchQuery = nsb.build();//查询建立 Page<T> page = null; if (heightFields!=null&&heightFields.size() > 0) {//如果设置高亮 page = elasticsearchTemplate.queryForPage(searchQuery, getEntityClass(), new SearchResultMapper() { @SuppressWarnings("unchecked") @Override public <T> Page<T> mapResults(SearchResponse response,Class<T> clazz, Pageable pageable) { List<T> chunk = new ArrayList<T>(); for (SearchHit searchHit : response.getHits()) { if (response.getHits().getHits().length <= 0) { return null; } Map<String, Object> entityMap = searchHit.getSource(); for (String highName : heightFields) { Text text[]=searchHit.getHighlightFields().get(highName).fragments(); if(text.length>0) { String highValue = searchHit.getHighlightFields().get(highName).fragments()[0].toString(); entityMap.put(highName, highValue); } } chunk.add((T) PropertyHelper.getFansheObj( getEntityClass(), entityMap)); } if (chunk.size() > 0) { return new PageImpl<T>((List<T>) chunk); } return new PageImpl<T>(new ArrayList<T>()); } }); } else//如果不设置高亮 { logger.info("#################"+qb.toString()); page = elasticsearchTemplate.queryForPage(searchQuery,getEntityClass()); } // List<T> ts = page.getContent(); basePage.setTotalRecord(page.getTotalElements()); basePage.setResults(page.getContent()); return basePage; } @Override public List<T> queryList(Map<String, Object> filedContentMap,final List<String> heightFields, String sortField, SortOrder order) { Field[] hfields=new Field[0]; if(heightFields!=null) { hfields = new Field[heightFields.size()]; for (int i = 0; i < heightFields.size(); i++) { //String o="{\"abc\" : \"[abc]\"}"; hfields[i] = new HighlightBuilder.Field(heightFields.get(i)).preTags("<em>").postTags("</em>").fragmentSize(250); } } NativeSearchQueryBuilder nsb = new NativeSearchQueryBuilder().withHighlightFields(hfields);//高亮字段 if (sortField != null && order != null)//排序 nsb.withSort(new FieldSortBuilder(sortField).ignoreUnmapped(true).order(order)); BoolQueryBuilder qb=QueryBuilders. boolQuery(); for (String key : filedContentMap.keySet()) {//字段查询 qb.must(QueryBuilders.matchQuery(key,filedContentMap.get(key))); } nsb.withQuery(qb); SearchQuery searchQuery = nsb.build();//查询建立 Page<T> page = null; if (heightFields!=null&&heightFields.size() > 0) {//如果设置高亮 page = elasticsearchTemplate.queryForPage(searchQuery, getEntityClass(), new SearchResultMapper() { @SuppressWarnings("unchecked") @Override public <T> Page<T> mapResults(SearchResponse response,Class<T> clazz, Pageable pageable) { List<T> chunk = new ArrayList<T>(); for (SearchHit searchHit : response.getHits()) { if (response.getHits().getHits().length <= 0) { return null; } Map<String, Object> entityMap = searchHit.getSource(); for (String highName : heightFields) { String highValue = searchHit.getHighlightFields().get(highName).fragments()[0].toString(); entityMap.put(highName, highValue); } chunk.add((T) PropertyHelper.getFansheObj(getEntityClass(), entityMap)); } if (chunk.size() > 0) { return new PageImpl<T>((List<T>) chunk); } return null; } }); } else//如果不设置高亮 page = elasticsearchTemplate.queryForPage(searchQuery,getEntityClass()); return page.getContent(); } /** * 本类查询 * * @param id * @return */ public T queryById(String id) { StringQuery stringQuery = new StringQuery("id=" + id); T t = elasticsearchTemplate.queryForObject(stringQuery, getEntityClass()); return t; } public ElasticsearchTemplate getElasticsearchTemplate() { return elasticsearchTemplate; } public Client getEsClient() { return esClient; } /** * 得到类型 * * @return */ public abstract Class<T> getEntityClass(); /** * 添加各自类的影射 */ public abstract void putClassMapping(); }

优秀的个人博客,低调大师

elasticsearch 常见操作

package com.topwalk.analysis.es.operation.impl; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; import org.apache.log4j.Logger; import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse; import org.elasticsearch.action.bulk.BulkProcessor; import org.elasticsearch.action.bulk.BulkProcessor.Listener; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.count.CountRequestBuilder; import org.elasticsearch.action.count.CountResponse; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.deletebyquery.DeleteByQueryRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.Client; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.cluster.metadata.MappingMetaData; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.indices.IndexMissingException; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation; import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogram; import org.elasticsearch.search.aggregations.bucket.histogram.Histogram; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.stats.Stats; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.elasticsearch.search.sort.SortOrder; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.topwalk.analysis.es.configuration.EsAggregation; import com.topwalk.analysis.es.configuration.EsAggregationParams; import com.topwalk.analysis.es.configuration.EsQueryParam; import com.topwalk.analysis.es.configuration.LogicOperator; import com.topwalk.analysis.es.configuration.Operator; import com.topwalk.analysis.es.configuration.Pager; import com.topwalk.analysis.es.factory.EsClient; import com.topwalk.analysis.es.operation.intf.EsService; public class EsServiceImpl implements EsService{ private Logger logger = Logger.getLogger(EsServiceImpl.class); @Override public boolean indexDataById(Client client, String index, String type, String id, String data) { // TODO Auto-generated method stub IndexResponse response = null; try { response = client.prepareIndex(index, type, id).setSource(data).execute().actionGet(); } catch (Exception e) { e.printStackTrace(); return false; } return response.isCreated(); } @Override public boolean bulkindexData(Client client, String index, String type, String data) { // TODO Auto-generated method stub BulkRequestBuilder bulkRequest = client.prepareBulk(); JSONArray arry = JSON.parseArray(data); for(int i = 0; i < arry.size(); i++) { JSONObject jobj = JSON.parseObject(arry.getString(i)); if(jobj.containsKey("_id")) { String _id = jobj.getString("_id"); jobj.remove("_id"); bulkRequest.add(client.prepareIndex(index, type, _id).setSource(arry.getString(i)) ); } else { bulkRequest.add(client.prepareIndex(index, type).setSource(arry.getString(i)) ); } } BulkResponse bulkResponse = bulkRequest.execute().actionGet(); if(bulkResponse.hasFailures()) { logger.error("bulkinsert fail message...." + bulkResponse.buildFailureMessage()); return false; } else { return true; } } @Override public boolean bulkupdateData(Client client, String index, String type, String data, List<EsQueryParam> params) { // TODO Auto-generated method stub List<String> types = new ArrayList<String>(); types.add(type); EsServiceImpl esimpl = new EsServiceImpl(); Pager page = new Pager(); page.setFrom(0); int count = esimpl.getCountByFields(client, index, types, params); page.setNum(count); List<String> ids = esimpl.getIdByFields(client, index, type, params, page); if(ids.size() == 0 || count == 0) { return false; } Map<String, Object> fieldValue = (Map<String, Object>) JSON.parse(data); for (String id : ids ) { esimpl.updateIndexById(client, index, type, id, fieldValue); } return true; } @Override public boolean indexData(Client client, String index, String type, String data) { // TODO Auto-generated method stub IndexResponse response = null; try { response = client.prepareIndex(index, type).setSource(data).execute().actionGet(); } catch (Exception e) { e.printStackTrace(); return false; } return response.isCreated(); } @Override public String getIndexById(Client client, String index, String type, String id) { // TODO Auto-generated method stub GetResponse response = null ; String result = null; try { response = client.prepareGet(index, type, id).execute().actionGet(); result = response.getSourceAsString(); } catch (Exception e ) { e.printStackTrace(); } return result; } @Override public boolean isIndexExists(Client client, String index, String type, String id) { // TODO Auto-generated method stub GetResponse response = null ; boolean result = false; try { response = client.prepareGet(index, type, id).execute().actionGet(); result = response.isExists(); } catch (Exception e ) { e.printStackTrace(); return false; } return result; } @Override public boolean delIndexById(Client client, String index, String type, String id) { // TODO Auto-generated method stub DeleteResponse response = null ; boolean result = false; try { response = client.prepareDelete(index, type, id).execute().actionGet(); result = response.isFound(); } catch (Exception e ) { e.printStackTrace(); return result; } return result; } @Override public boolean delIndexByFields(Client client, String index, String type, List<EsQueryParam> params) { // TODO Auto-generated method stub BoolQueryBuilder db = QueryBuilders.boolQuery(); try { DeleteByQueryRequestBuilder dbq = client.prepareDeleteByQuery(index).setTypes(type); db = getQueryBuilder(params); dbq.setQuery(db); dbq.execute().actionGet(); } catch (Exception e ) { e.printStackTrace(); return true; } return true; } @Override public boolean updateIndexById(Client client, String index, String type, String id, Map<String, Object> fieldValue) { UpdateResponse response = null; UpdateRequest updateRequest = new UpdateRequest(); updateRequest.index(index); if(type != null) { updateRequest.type(type); } updateRequest.id(id); updateRequest.doc(fieldValue); updateRequest.retryOnConflict(5); try { response = client.update(updateRequest).get(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } return true; } @Override public boolean addFieldToDoc(Client client, String index, String type, String id, Map<String, Object> fieldValue) { // TODO Auto-generated method stub Iterator<String> iter = fieldValue.keySet().iterator(); boolean isExist = false; while (iter.hasNext()) { String key = iter.next(); isExist = isFieldExist(client, index, type, id, key); if(isExist) { try { throw new Exception("the key [" + key + "] is exist!"); } catch (Exception e) { e.printStackTrace(); return false; } } } UpdateResponse response = null; UpdateRequest updateRequest = new UpdateRequest(); updateRequest.index(index).type(type).id(id); updateRequest.doc(fieldValue); try { response = client.update(updateRequest).get(); } catch (InterruptedException e) { e.printStackTrace(); return false; } catch (ExecutionException e) { e.printStackTrace(); return false; } return true; } @Override public boolean removeieldFromDoc(Client client, String index, String type, String id, String field) { boolean isExist = false; isExist = isFieldExist( client, index, type, id, field); if(! isExist) { try { throw new Exception("the key [" + field + "] is not exist!"); } catch (Exception e) { e.printStackTrace(); return false; } } try { client.prepareUpdate(index, type, id).setScript("ctx._source.remove(\"" + field+ "\")", ScriptService.ScriptType.INLINE).execute().actionGet(); } catch (Exception e) { e.printStackTrace(); return false; } return true; } public List<String> getIdByFields(Client client, String index, String type, List<EsQueryParam> params, Pager pager) { BoolQueryBuilder db = QueryBuilders.boolQuery(); List<String> list= new ArrayList<String>(); SearchRequestBuilder searchRequest = null; db = getQueryBuilder(params); if (params != null && params.size() > 0 ) { searchRequest = client.prepareSearch(index).setQuery(db).setTypes(type); } else { searchRequest = client.prepareSearch(index).setQuery(QueryBuilders.matchAllQuery()).setTypes(type); } if(pager != null && pager.getFrom() >= 0 && pager.getNum() > 0 ) { searchRequest.setFrom(pager.getFrom()).setSize(pager.getNum()); } else if(pager != null && pager.getSortField() != null && pager.getSortValue().equals( "ASC")) { searchRequest.addSort(pager.getSortField(), SortOrder.ASC); } else if(pager != null && pager.getSortField() != null && pager.getSortValue().equals("desc")) { searchRequest.addSort(pager.getSortField(), SortOrder.DESC); } SearchResponse response = searchRequest.execute().actionGet(); for(SearchHit hit : response.getHits()) { list.add(hit.getId()); } return list; } @Override public List<String> getIndexByFields(Client client, String index, List<String> types, List<EsQueryParam> params, Pager pager) { BoolQueryBuilder db = QueryBuilders.boolQuery(); List<String> list= new ArrayList<String>(); try { SearchRequestBuilder searchRequest = null; if (params != null && params.size() > 0 ) { db = getQueryBuilder(params); searchRequest = client.prepareSearch(index).setQuery(db); } else { searchRequest = client.prepareSearch(index).setQuery(QueryBuilders.matchAllQuery()); } if(pager != null && pager.getFrom() >= 0 && pager.getNum() > 0 ) { searchRequest.setFrom(pager.getFrom()).setSize(pager.getNum()); } else if(pager != null && pager.getSortField() != null && pager.getSortValue().equals("asc")) { searchRequest.addSort(pager.getSortField(), SortOrder.ASC); } else if(pager != null && pager.getSortField() != null && pager.getSortValue().equals("desc")) { searchRequest.addSort(pager.getSortField(), SortOrder.DESC); } if(types != null && types.size() > 0) { String[] a = new String[types.size()]; searchRequest.setTypes(types.toArray(a)); } SearchResponse response = searchRequest.execute().actionGet(); if(response.getHits().totalHits() > 0) { for(SearchHit hit : response.getHits()) { list.add(JSON.toJSONString(hit.getSource())); } } } catch (Exception e) { e.printStackTrace(); } return list; } @Override public List<String> scrollSearch(Client client, String index, String type, List<EsQueryParam> params, Pager pager) { BoolQueryBuilder db = QueryBuilders.boolQuery(); List<String> list= new ArrayList<String>(); try { SearchRequestBuilder searchRequest = null; if (params != null && params.size() > 0 ) { db = getQueryBuilder(params); searchRequest = client.prepareSearch(index).setSearchType(SearchType.SCAN).setScroll(new TimeValue(60000)).setQuery(db); } else { searchRequest = client.prepareSearch(index).setSearchType(SearchType.SCAN).setScroll(new TimeValue(60000)).setQuery(QueryBuilders.matchAllQuery()); } if (type != null) { searchRequest.setTypes(type); } if(pager != null) { searchRequest.setSize(pager.getNum()); } SearchResponse scrollResp = searchRequest.execute().actionGet(); while (true) { scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet(); if(scrollResp.getHits().getHits().length == 0) { break; } for(SearchHit hit: scrollResp.getHits()) { list.add(hit.getSourceAsString()); } } } catch(Exception e) { e.printStackTrace(); } return list; } @Override public boolean reindex(Client client, String index, String type,String newindex, String newtype, List<EsQueryParam> params) { BoolQueryBuilder db = QueryBuilders.boolQuery(); try { SearchRequestBuilder searchRequest = null; if (params != null && params.size() > 0 ) { db = getQueryBuilder(params); searchRequest = client.prepareSearch(index).setSearchType(SearchType.SCAN).setScroll(new TimeValue(60000)).setQuery(db); } else { searchRequest = client.prepareSearch(index).setSearchType(SearchType.SCAN).setScroll(new TimeValue(60000)).setQuery(QueryBuilders.matchAllQuery()); } if (type != null) { searchRequest.setTypes(type); } SearchResponse scrollResp = searchRequest.execute().actionGet(); BulkProcessor bulkProcessor = BulkProcessor.builder(client, createBulkProcessorListener()) .setBulkActions(10000) .setFlushInterval(TimeValue.timeValueSeconds(5)).build(); while (true) { scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet(); if(scrollResp.getHits().getHits().length == 0) { bulkProcessor.close(); break; } for(SearchHit hit: scrollResp.getHits()) { IndexRequest request = new IndexRequest(newindex, newtype, hit.id()); request.source(hit.getSourceAsString()); bulkProcessor.add(request); } bulkProcessor.flush(); } } catch(Exception e) { e.printStackTrace(); return false; } return true; } public Map<String, Object> getMappings(Client client, String index, String type) { Map<String, Object> result = null; IndexMetaData imd = null; try { ClusterState cs = client.admin() .cluster() .prepareState() .setIndices(index) .execute() .actionGet() .getState(); imd = cs.getMetaData().index(index); MappingMetaData mdd = imd.mapping(type); result = mdd.getSourceAsMap(); } catch (IndexMissingException | IOException e) { } return result; } public Listener createBulkProcessorListener() { return new BulkProcessor.Listener() { @Override public void beforeBulk(long executionId, BulkRequest request) { // TODO Auto-generated method stub } @Override public void afterBulk(long executionId, BulkRequest request, Throwable failure) { // TODO Auto-generated method stub } @Override public void afterBulk(long executionId, BulkRequest request, BulkResponse response) { // TODO Auto-generated method stub } }; } @Override public int getCountByFields(Client client, String index, List<String> types, List<EsQueryParam> params) { CountResponse response = null; CountRequestBuilder countBuilder = null; BoolQueryBuilder db = null; try { db = getQueryBuilder(params); countBuilder = client.prepareCount(index); if(types != null && types.size() > 0) { String[] a = new String[types.size()]; countBuilder.setTypes(types.toArray(a)); } if (params != null && params.size() > 0) { response = countBuilder.setQuery(db).execute().actionGet(); } else { response = countBuilder.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet(); } } catch (Exception e) { e.printStackTrace(); } return (int) response.getCount(); } //check field isexist public boolean isFieldExist(Client client, String index, String type, String id, String key) { GetResponse response = null ; boolean result = false; try { response = client.prepareGet(index, type, id).execute().actionGet(); result = JSON.parseObject(response.getSourceAsString()).containsKey(key); } catch (Exception e ) { e.printStackTrace(); } return result; } @Override public int getTermsCountByAgg(Client client, String index, List<String> types, List<EsQueryParam> params, List<EsAggregationParams> aggList, Pager page) { BoolQueryBuilder db = null; if(params != null) { db = getQueryBuilder(params); } List<Map<String, String>> result = new ArrayList<Map<String, String>>(); AbstractAggregationBuilder parentBuilder = null; for (int i = aggList.size()-1; i >= 0; i--) { EsAggregationParams aggParams = aggList.get(i); if(i == aggList.size()-1) { if (aggParams.getEsAggregation() == EsAggregation.TERM) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(page.getNum()); } } else { if (aggParams.getEsAggregation() == EsAggregation.TERM) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(page.getNum()).subAggregation(parentBuilder); } } } SearchRequestBuilder requestBuilder = client.prepareSearch(index); if(types != null && types.size() > 0) { String[] a = new String[types.size()]; requestBuilder.setTypes(types.toArray(a)); } requestBuilder.addAggregation(parentBuilder); if(db != null) { requestBuilder.setQuery(db); } SearchResponse sr = requestBuilder.execute().actionGet(); Terms t = sr.getAggregations().get(aggList.get(0).getAggName()); Iterator< ? extends MultiBucketsAggregation.Bucket > topBucket = null; topBucket = t.getBuckets().iterator(); result = getMap(topBucket, aggList, 0, result, null); return result.size(); } @Override public List<Map<String, String>> AggregationByFields(Client client, String index, List<String> types, List<EsQueryParam> params, List<EsAggregationParams> aggList) { BoolQueryBuilder db = null; if(params != null && params.size() > 0) { db = getQueryBuilder(params); } List<Map<String, String>> result = new ArrayList<Map<String, String>>(); AbstractAggregationBuilder parentBuilder = null; for (int i = aggList.size()-1; i >= 0; i--) { EsAggregationParams aggParams = aggList.get(i); if(i == aggList.size()-1) { if (aggParams.getEsAggregation() == EsAggregation.STATS) { parentBuilder = AggregationBuilders.stats( aggParams.getAggName()) .field(aggParams.getField()); } else if (aggParams.getEsAggregation() == EsAggregation.DATE_HISTOGRAM) { DateHistogram.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = DateHistogram.Order.KEY_ASC; } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = DateHistogram.Order.KEY_DESC; }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = DateHistogram.Order.COUNT_ASC; } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = DateHistogram.Order.COUNT_DESC; } parentBuilder = AggregationBuilders.dateHistogram(aggParams.getAggName()).field(aggParams.getField()).interval(aggParams.getDateInterval()).order(order); } else if (aggParams.getEsAggregation() == EsAggregation.TERM) { Terms.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = Terms.Order.term(true); } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = Terms.Order.term(false); }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = Terms.Order.count(true); } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = Terms.Order.count(false); } if( aggParams.isKeyOrder() == null && aggParams.isValOrder() == null) { if (aggParams.getAggSize() == 0) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()); } } else { if (aggParams.getAggSize() == 0) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()).order(order); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()).order(order); } } } else if (aggParams.getEsAggregation() == EsAggregation.TERM_SCRIPTS) { Terms.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = Terms.Order.term(true); } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = Terms.Order.term(false); }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = Terms.Order.count(true); } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = Terms.Order.count(false); } if( aggParams.isKeyOrder() == null || aggParams.isValOrder() == null) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).script(aggParams.getField()); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).script(aggParams.getField()).order(order); } } else if (aggParams.getEsAggregation() == EsAggregation.HISTOGRAM) { parentBuilder = AggregationBuilders.histogram(aggParams.getAggName()).field(aggParams.getField()).interval(aggParams.getHisaggrateInterval()); } else if (aggParams.getEsAggregation() == EsAggregation.SUM) { parentBuilder = AggregationBuilders.sum(aggParams.getAggName()).field(aggParams.getField()); } } else { if (aggParams.getEsAggregation() == EsAggregation.TERM) { Terms.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = Terms.Order.term(true); } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = Terms.Order.term(false); }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = Terms.Order.count(true); } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = Terms.Order.count(false); } if( aggParams.isKeyOrder() == null && aggParams.isValOrder() == null) { if (aggParams.getAggSize() == 0 ) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()).subAggregation(parentBuilder); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()).subAggregation(parentBuilder); } } else { if (aggParams.getAggSize() == 0 ) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).order(order).size(aggParams.getAggSize()).subAggregation(parentBuilder); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).order(order).size(aggParams.getAggSize()).subAggregation(parentBuilder); } } } else if (aggParams.getEsAggregation() == EsAggregation.TERM_SCRIPTS) { Terms.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = Terms.Order.term(true); } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = Terms.Order.term(false); }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = Terms.Order.count(true); } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = Terms.Order.count(false); } if( aggParams.isKeyOrder() == null || aggParams.isValOrder() == null) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).script(aggParams.getField()).subAggregation(parentBuilder); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).script(aggParams.getField()).order(order).subAggregation(parentBuilder); } } else if (aggParams.getEsAggregation() == EsAggregation.DATE_HISTOGRAM) { DateHistogram.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = DateHistogram.Order.KEY_ASC; } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = DateHistogram.Order.KEY_DESC; }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = DateHistogram.Order.COUNT_ASC; } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = DateHistogram.Order.COUNT_DESC; } parentBuilder = AggregationBuilders.dateHistogram(aggParams.getAggName()).field(aggParams.getField()).interval(aggParams.getDateInterval()).subAggregation(parentBuilder).order(order); } else if (aggParams.getEsAggregation() == EsAggregation.HISTOGRAM) { parentBuilder = AggregationBuilders.histogram(aggParams.getAggName()).field(aggParams.getField()).interval(aggParams.getHisaggrateInterval()).subAggregation(parentBuilder); } } } SearchRequestBuilder requestBuilder = client.prepareSearch(index); if(types != null && types.size() > 0) { String[] a = new String[types.size()]; requestBuilder.setTypes(types.toArray(a)); } requestBuilder.addAggregation(parentBuilder); if(db != null) { requestBuilder.setQuery(db); } logger.debug(requestBuilder.toString()); SearchResponse sr = requestBuilder.execute().actionGet(); Iterator< ? extends MultiBucketsAggregation.Bucket > topBucket = null; if(aggList.get(0).getEsAggregation() == EsAggregation.DATE_HISTOGRAM) { DateHistogram agg = sr.getAggregations().get(aggList.get(0).getAggName()); topBucket = agg.getBuckets().iterator(); } else if (aggList.get(0).getEsAggregation() == EsAggregation.TERM ||aggList.get(0).getEsAggregation() == EsAggregation.TERM_SCRIPTS ) { Terms t = sr.getAggregations().get(aggList.get(0).getAggName()); topBucket = t.getBuckets().iterator(); } else if (aggList.get(0).getEsAggregation() == EsAggregation.HISTOGRAM) { Histogram agg = sr.getAggregations().get(aggList.get(0).getAggName()); topBucket = agg.getBuckets().iterator(); } else if (aggList.get(0).getEsAggregation() == EsAggregation.SUM) { Sum agg = sr.getAggregations().get(aggList.get(0).getAggName()); Map<String, String> sumresult = new HashMap<String, String>(); sumresult.put(agg.getName(), String.valueOf(agg.getValue())); result.add(sumresult); return result; } else if(aggList.get(0).getEsAggregation() == EsAggregation.STATS) { Stats stats = sr.getAggregations().get(aggList.get(0).getAggName()); Map<String, String> statsresult = new HashMap<String, String>(); statsresult.put("count", String.valueOf(stats.getCount())); statsresult.put("avg", String.valueOf(stats.getAvg())); statsresult.put("max", String.valueOf(stats.getMax())); statsresult.put("min", String.valueOf(stats.getMin())); statsresult.put("sum", String.valueOf(stats.getSum())); result.add(statsresult); return result; } Map<String, String> map = new HashMap<String, String>(); result = getMap(topBucket, aggList, 0, result, map); return result; } @Override public SearchResponse getResponseByAggregationField(Client client, String index, List<String> types, List<EsQueryParam> params, List<EsAggregationParams> aggList) { BoolQueryBuilder db = null; if(params != null && params.size() > 0) { db = getQueryBuilder(params); } List<Map<String, String>> result = new ArrayList<Map<String, String>>(); AbstractAggregationBuilder parentBuilder = null; for (int i = aggList.size()-1; i >= 0; i--) { EsAggregationParams aggParams = aggList.get(i); if(i == aggList.size()-1) { if (aggParams.getEsAggregation() == EsAggregation.STATS) { parentBuilder = AggregationBuilders.stats( aggParams.getAggName()) .field(aggParams.getField()); } else if (aggParams.getEsAggregation() == EsAggregation.DATE_HISTOGRAM) { DateHistogram.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = DateHistogram.Order.KEY_ASC; } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = DateHistogram.Order.KEY_DESC; }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = DateHistogram.Order.COUNT_ASC; } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = DateHistogram.Order.COUNT_DESC; } parentBuilder = AggregationBuilders.dateHistogram(aggParams.getAggName()).field(aggParams.getField()).interval(aggParams.getDateInterval()).order(order); } else if (aggParams.getEsAggregation() == EsAggregation.TERM) { Terms.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = Terms.Order.term(true); } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = Terms.Order.term(false); }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = Terms.Order.count(true); } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = Terms.Order.count(false); } if( aggParams.isKeyOrder() == null && aggParams.isValOrder() == null) { if (aggParams.getAggSize() == 0) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()); } } else { if (aggParams.getAggSize() == 0) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()).order(order); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()).order(order); } } } else if (aggParams.getEsAggregation() == EsAggregation.TERM_SCRIPTS) { Terms.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = Terms.Order.term(true); } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = Terms.Order.term(false); }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = Terms.Order.count(true); } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = Terms.Order.count(false); } if( aggParams.isKeyOrder() == null || aggParams.isValOrder() == null) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).script(aggParams.getField()); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).script(aggParams.getField()).order(order); } } else if (aggParams.getEsAggregation() == EsAggregation.HISTOGRAM) { parentBuilder = AggregationBuilders.histogram(aggParams.getAggName()).field(aggParams.getField()).interval(aggParams.getHisaggrateInterval()); } else if (aggParams.getEsAggregation() == EsAggregation.SUM) { parentBuilder = AggregationBuilders.sum(aggParams.getAggName()).field(aggParams.getField()); } else if (aggParams.getEsAggregation() == EsAggregation.SUM_SCRIPTS) { parentBuilder = AggregationBuilders.sum(aggParams.getAggName()).script(aggParams.getField()); } } else { if (aggParams.getEsAggregation() == EsAggregation.TERM) { Terms.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = Terms.Order.term(true); } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = Terms.Order.term(false); }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = Terms.Order.count(true); } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = Terms.Order.count(false); } if( aggParams.isKeyOrder() == null && aggParams.isValOrder() == null) { if (aggParams.getAggSize() == 0 ) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()).subAggregation(parentBuilder); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).size(aggParams.getAggSize()).subAggregation(parentBuilder); } } else { if (aggParams.getAggSize() == 0 ) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).order(order).size(aggParams.getAggSize()).subAggregation(parentBuilder); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).field(aggParams.getField()).order(order).size(aggParams.getAggSize()).subAggregation(parentBuilder); } } } else if (aggParams.getEsAggregation() == EsAggregation.TERM_SCRIPTS) { Terms.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = Terms.Order.term(true); } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = Terms.Order.term(false); }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = Terms.Order.count(true); } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = Terms.Order.count(false); } if( aggParams.isKeyOrder() == null || aggParams.isValOrder() == null) { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).script(aggParams.getField()).subAggregation(parentBuilder); } else { parentBuilder = AggregationBuilders.terms(aggParams.getAggName()).script(aggParams.getField()).order(order).subAggregation(parentBuilder); } } else if (aggParams.getEsAggregation() == EsAggregation.DATE_HISTOGRAM) { DateHistogram.Order order = null; if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("asc")) { order = DateHistogram.Order.KEY_ASC; } else if( aggParams.isKeyOrder() !=null && aggParams.isKeyOrder().equals("desc") ) { order = DateHistogram.Order.KEY_DESC; }else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("asc") ) { order = DateHistogram.Order.COUNT_ASC; } else if( aggParams.isValOrder() !=null && aggParams.isValOrder().equals("desc") ){ order = DateHistogram.Order.COUNT_DESC; } parentBuilder = AggregationBuilders.dateHistogram(aggParams.getAggName()).field(aggParams.getField()).interval(aggParams.getDateInterval()).subAggregation(parentBuilder).order(order); } else if (aggParams.getEsAggregation() == EsAggregation.HISTOGRAM) { parentBuilder = AggregationBuilders.histogram(aggParams.getAggName()).field(aggParams.getField()).interval(aggParams.getHisaggrateInterval()).subAggregation(parentBuilder); } } } SearchRequestBuilder requestBuilder = client.prepareSearch(index); if(types != null && types.size() > 0) { String[] a = new String[types.size()]; requestBuilder.setTypes(types.toArray(a)); } requestBuilder.addAggregation(parentBuilder); if(db != null) { requestBuilder.setQuery(db); } System.out.println(requestBuilder.toString()); SearchResponse sr = requestBuilder.execute().actionGet(); return sr; } public List<Map<String, String>> getMap(Iterator< ? extends MultiBucketsAggregation.Bucket > topBucket , List<EsAggregationParams> aggList, int level, List<Map<String, String>> result, Map<String, String> map) { if (aggList.size() ==1&& level == 0) { while(topBucket.hasNext()) { map = new HashMap<String, String>(); MultiBucketsAggregation.Bucket b3= topBucket.next(); if (aggList.get(0).getEsAggregation() == EsAggregation.TERM_SCRIPTS) { map.put( b3.getKey(), String.valueOf(b3.getDocCount()) ); } else { map.put(aggList.get(0).getField(), b3.getKey()); map.put("doc_count", String.valueOf(b3.getDocCount())); } result.add(map); } return result; } else { level ++; } if(level < aggList.size() && aggList.size() != 1) { while(topBucket.hasNext()) { Map<String, String> map2 = new HashMap<String, String>(); MultiBucketsAggregation.Bucket b2= topBucket.next(); map2.put(aggList.get(level-1).getField(), b2.getKey()); map2.put("doc_count" , String.valueOf(b2.getDocCount()) ); if(aggList.get(level).getEsAggregation() == EsAggregation.TERM || aggList.get(level).getEsAggregation() == EsAggregation.TERM_SCRIPTS) { Terms t = b2.getAggregations().get(aggList.get(level ).getAggName()); map2.put(aggList.get(level).getField(), b2.getKey()); getMap(t.getBuckets().iterator(), aggList, level, result, map2); } else if (aggList.get(level).getEsAggregation() == EsAggregation.STATS) { Stats stats = b2.getAggregations().get(aggList.get(level ).getAggName()); map2.put("count", String.valueOf(stats.getCount())); map2.put("sum", String.valueOf(stats.getSum())); map2.put("avg", String.valueOf(stats.getAvg())); map2.put("max", String.valueOf(stats.getMax())); map2.put("min", String.valueOf(stats.getMin())); result.add(map2); } else if (aggList.get(level).getEsAggregation() == EsAggregation.SUM) { Sum agg = b2.getAggregations().get(aggList.get(level).getAggName()); map2.put(aggList.get(level ).getField(), String.valueOf(agg.getValue())); result.add(map2); } else if (aggList.get(level).getEsAggregation() == EsAggregation.DATE_HISTOGRAM) { DateHistogram datehis = b2.getAggregations().get(aggList.get(level ).getAggName()); map2.put(aggList.get(level ).getField(), b2.getKey()); getMap( datehis.getBuckets().iterator(), aggList, level, result, map2); } else if (aggList.get(level).getEsAggregation() == EsAggregation.HISTOGRAM) { Histogram his = b2.getAggregations().get(aggList.get(level ).getAggName()); map2.put(aggList.get(level ).getField(), b2.getKey()); getMap( his.getBuckets().iterator(), aggList, level, result, map2); } } return result; } else { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); //List<String> list = new ArrayList<String>(); while(topBucket.hasNext()) { Map<String, String> m = new HashMap<String, String>(); MultiBucketsAggregation.Bucket b3= topBucket.next(); m.put(aggList.get(level -1 ).getField(), b3.getKey()); m.put("doc_count", String.valueOf(b3.getDocCount())); list.add(m); } map.put(aggList.get(level -1 ).getField(), JSON.toJSONString(list)); result.add(map); return result; } } public BoolQueryBuilder getQueryBuilder(List<EsQueryParam> params) { BoolQueryBuilder db = null; if (params != null) { db = QueryBuilders.boolQuery(); for (EsQueryParam param : params) { if(param.getLogicOperator() == LogicOperator.AND && param.getOperator() == Operator.EQUAL) { db = db.must(QueryBuilders.matchQuery(param.getField(), param.getValue())); } else if(param.getLogicOperator() == LogicOperator.AND && param.getOperator() == Operator.LIKE) { db = db.must(QueryBuilders.wildcardQuery(param.getField(), param.getValue())); } else if(param.getLogicOperator() == LogicOperator.OR && param.getOperator() == Operator.LIKE) { db = db.should(QueryBuilders.wildcardQuery(param.getField(), param.getValue())); } else if(param.getLogicOperator() == LogicOperator.MUST_NOT && param.getOperator() == Operator.LIKE) { db = db.mustNot(QueryBuilders.wildcardQuery(param.getField(), param.getValue())); } else if(param.getLogicOperator() == LogicOperator.MUST_NOT && param.getOperator() == Operator.EQUAL) { db = db.mustNot(QueryBuilders.matchQuery(param.getField(), param.getValue())); } else if(param.getOperator() == Operator.GT) { db = db.must(QueryBuilders.rangeQuery(param.getField()).gt(param.getValue())); } else if(param.getOperator() == Operator.GTE) { db = db.must(QueryBuilders.rangeQuery(param.getField()).gte(param.getValue())); } else if(param.getOperator() == Operator.LT) { db = db.must(QueryBuilders.rangeQuery(param.getField()).lt(param.getValue())); } else if(param.getOperator() == Operator.LTE) { db = db.must(QueryBuilders.rangeQuery(param.getField()).lte(param.getValue())); } else if (param.getLogicOperator() == LogicOperator.OR) { db = db.should(QueryBuilders.matchQuery(param.getField(), param.getValue())); } else if (param.getLogicOperator() == LogicOperator.AND ) { db = db.must(QueryBuilders.matchQuery(param.getField(), param.getValue())); } else if (param.getOperator() == Operator.EQUAL ) { db = db.must(QueryBuilders.matchQuery(param.getField(), param.getValue())); } else if (param.getOperator() == Operator.NOTEQUAL ) { db = db.mustNot(QueryBuilders.matchQuery(param.getField(), param.getValue())); } else if(param.getOperator() == Operator.TERMS) { db = db.must(QueryBuilders.termsQuery(param.getField(), param.getTermsList()).minimumMatch(1)); } else if (param.getLogicOperator() == null &&param.getOperator() == null ) { db = db.must(QueryBuilders.matchQuery(param.getField(), param.getValue())); } } } return db; } @Override public boolean createType(Client client, String index, String type, String mapping) { // TODO Auto-generated method stub IndicesExistsRequest indexrequest = new IndicesExistsRequest(index); boolean exist = client.admin().indices().exists(indexrequest).actionGet().isExists(); if (! exist) { client.admin().indices().create(new CreateIndexRequest(index)).actionGet(); } PutMappingRequest putMappingRequest = new PutMappingRequest(index); putMappingRequest.type(type); putMappingRequest.source(mapping); PutMappingResponse putMappingResponse = client.admin().indices().putMapping(putMappingRequest).actionGet(); return putMappingResponse.isAcknowledged(); } @Override public boolean isIndexExistsByFieldVal(Client client, String index, String type, String field, String fieldVal) { // TODO Auto-generated method stub SearchRequestBuilder searchRequest = null ; boolean result = false; try { searchRequest = client.prepareSearch(index).setTypes(type).setQuery(QueryBuilders.matchQuery(field, fieldVal)); SearchResponse response = searchRequest.execute().actionGet(); result = (response.getHits().hits().length > 0) ? true : false; } catch (Exception e ) { e.printStackTrace(); return false; } return result; } @Override public SearchHits termsQuery(Client client, String index, String type,String field,List<String> terms) { SearchRequestBuilder searchRequest = null ; QueryBuilder qb = QueryBuilders.termsQuery(field, terms).minimumMatch(1); searchRequest = client.prepareSearch(index).setTypes(type).setQuery(qb).setSize(1000000000); SearchResponse response = searchRequest.execute().actionGet(); return response.getHits(); //后续优化 } } 捐助开发者 在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。 谢谢您的赞助,我会做的更好!

优秀的个人博客,低调大师

docker基本操作

保存自己的image: #docker commit -m "image msg" -a "作者信息" 0b2616b0e5a8 repository:tag_msg //用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息 #4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c 查看保存的image: #docker images 删除image #docker rmi ubuntu:12.04 #在此之前一般使用docker ps -a 检查一下是否还有依赖于该image的container,执行docker rm container_id 删除未打标签的image: #docker rmi $(docker images -q -f "dangling=true") #同上简称是否存在依赖的container #docker rmi $(docker images --quit --filter "dangling=true") https://yeasy.gitbooks.io/docker_practice/content/container/index.html

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册