前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java api使用ElastichSearch指南

java api使用ElastichSearch指南

作者头像
爬蜥
发布于 2019-07-09 04:32:27
发布于 2019-07-09 04:32:27
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

AggregationBuilders.terms:一段时间内,某个字段取值的数量排名前几的聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/ ** 	@param startTime 开始的时间
     * @param endTime 结束的时间
     * @param termAggName term过滤
     * @param fieldName 要做count的字段
     * @param top 返回的数量
     */
RangeQueryBuilder actionPeriod = QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second");
TermsBuilder termsBuilder = AggregationBuilders.terms(termAggName).field(fieldName).size(top).order(Terms.Order.count(false));
return client.prepareSearch(INDICE).setQuery(actionPeriod).addAggregation(termsBuilder).setSize(0).execute().actionGet();     
复制代码

order(Terms.Order.count(false)):表示降序

size(top):top表示只要排序的数量

prepareSearch(INDICE):INDICE表示索引的名字

setSize(0):表示只要聚合结果

如果需要去掉某些特殊字段取值 client为构建的ES客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 BoolQueryBuilder actionPeriodMustNot = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second")).mustNot(QueryBuilders.termQuery(field, value));
复制代码

如果是单个字段特定的多个值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//values是个List
BoolQueryBuilder actioPeriodMust = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second")).must(QueryBuilders.termsQuery(field, values));
复制代码

使用结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Terms clickCount= sr.getAggregations().get(termAggName);
for (Terms.Bucket term:clickCount.getBuckets()){
  int key = term.getKeyAsNumber().intValue(); //要排序字段的值
  long docCount = term.getDocCount(); //数量
}
复制代码

date_histogram: 一段时间之内,时间字段按照时间间隔的聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BoolQueryBuilder actioPeriodMust = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second"));
DateHistogramBuilder actionInterval = AggregationBuilders.dateHistogram(dateNickName).field("myTimeField").timeZone("Asia/Shanghai");
if (timeInterval<MINUTE){
  actionTimeInterval.interval(DateHistogramInterval.seconds(timeInterval)).format("HH:mm:ss");
}else if (timeInterval<HOUR){
  actionTimeInterval.interval(DateHistogramInterval.minutes(timeInterval / MINUTE)).format("dd HH:mm");
}else if (timeInterval < DAY){
  actionTimeInterval.interval(DateHistogramInterval.hours(timeInterval / HOUR)).format("HH:mm");
}else if (timeInterval < THIRTY_DAY){
  actionTimeInterval.interval(DateHistogramInterval.days(timeInterval / DAY));
}else{
  actionTimeInterval.interval(DateHistogramInterval.MONTH);
}
actionInterval.format("yyyy-MM-dd HH:mm:ssZ");
return client.prepareSearch(INDICE).setQuery(actioPeriodMust).addAggregation(actionInterval).setSize(0).execute().actionGet();
复制代码

es本身默认设置的时间戳是 UTC形式,在国内要设置TimeZone(“Asia/Shanghai”);

java的SimpleDateFormate会默认获取虚拟机所在时区的时间戳,所以存时间的时候,最好存与时区无关的时间,再做本地化显示

使用结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Histogram histogram=sr.getAggregations().get(dateNickName);
for(Histogram.Bucket entry:histogram.getBuckets()){
  String key = entry.getKeyAsString();//时间间隔
  long count = entry.getDocCount();//数量
}
复制代码

subAggregation:一段时间内,按照一定的时间间隔,每个间隔段内字段每个取值的数量聚合

相当于合并上述两个场景

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BoolQueryBuilder query = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second"))
  .must(QueryBuilders.termsQuery("action", orderValue));
DateHistogramBuilder actionTimeInterval = AggregationBuilders.dateHistogram(dateNickName).field("myTimeField").timeZone("Asia/Shanghai");
actionTimeInterval.subAggregation(AggregationBuilders.terms(termNickName).field("action").size(size));
return client.prepareSearch(INDICE).setQuery(query).addAggregation(actionTimeInterval).setSize(0).execute().actionGet();
复制代码

使用结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Histogram hitogram = sr.getAggregations().get(dateAggName);
for (Histogram.Bucket date : hitogram.getBuckets()) {
  String intervalName = date.getKeyAsString();
  long timeIntervalCount = date.getDocCount();
  if (timeIntervalCount != 0) {
    Terms terms = date.getAggregations().get(termAggName);
    for (Terms.Bucket entry : terms.getBuckets()) {
      int key=	entry.getKeyAsNumber().intValue();
      long childCount = entry.getDocCount();
    }
  }
}
复制代码

分页获取数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BoolQueryBuilder actionPeriodMust = QueryBuilders.boolQuery().must(QueryBuilders.termQuery(key, value)).must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second"));
return client.prepareSearch(INDICE).setQuery(actionPeriodMust).addSort(SortBuilders.fieldSort("myTimeField").order(SortOrder.ASC)).setFrom(from).setSize(size).execute().actionGet();        
复制代码

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Iterator<SearchHit> iterator = sr.getHits().iterator();
while (iterator.hasNext()) {
  SearchHit next = iterator.next();
  JSONObject jo = JSONObject.parseObject(next.getSourceAsString());
}
复制代码

AggregationBuilders.cardinality:获取某个字段的唯一取值数量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BoolQueryBuilder query = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTimeInSec*1000).lte(endTimeInSec*1000).format("epoch_millis"));
CardinalityBuilder fieldCardinality = AggregationBuilders.cardinality(cardinalityAggName).field(field);//field 要获取的字段
return client.prepareSearch(INDICE).setQuery(query).addAggregation(fieldCardinality).execute().actionGet();
复制代码

使用结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Cardinality cardinality = sr.getAggregations().get(cardinalityAggName);
long value = cardinality.getValue();
复制代码

bool查询

比如想要addr是beijing的,同时必须满足条件:name是 paxi,或者,phoneNumber是 1234567890

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BoolQueryBuilder searchIdQuery = QueryBuilders.boolQuery();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
while (kvs.hasNext()){
  Map.Entry<String, String> fieldValue = kvs.next();
  String field=fieldValue.getKey();
  String value=fieldValue.getValue();
  searchIdQuery.should(QueryBuilders.termQuery(field, value));
}
boolQueryBuilder.must(searchIdQuery);
boolQueryBuilder.must(QueryBuilders.termsQuery(key, values));
return client.prepareSearch(INDICE).setQuery(boolQueryBuilder).execute().actionGet();
复制代码
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
黑苹果MacOS Big Sur 11.0 安装教程及驱动工具
最新黑苹果MacOS Big Sur 11.0安装教程,附带各电脑EFI驱动合集、原版引导镜像,图文并茂简单易懂…
全栈程序员站长
2022/09/07
6.6K0
黑苹果MacOS Big Sur 11.0 安装教程及驱动工具
史上最全的黑苹果系统「MacOS」安装教程,小白也能秒掌握!
折腾过的人应该不陌生,自从苹果采用 Intel 的处理器,被解锁后可以安装在 Intel CPU 与部分 AMD CPU 的机器上。从而出现了一大批非苹果设备而使用苹果操作系统的机器,被称为黑苹果(Hackintosh)。
全栈程序员站长
2022/07/01
12.3K0
史上最全的黑苹果系统「MacOS」安装教程,小白也能秒掌握!
安装CLOVER引导器到硬盘EFI分区
彻底脱离CLOVER引导U盘 目录: 1使用EFI TOOLS Clover 安装CLOVER引导器到EFI分区。 2使用Clover v2.3k rXXXX.pkg 安装CLOVER引导器到EFI分区 前言 我们的电脑里已经安装好了双系统,但是之前都是通过启动CLOVER引导U盘进行引导双系统的。 本章节内容,将简单的介绍将在MAC系统(=OSX系统)下将CLOVER引导器安装到硬盘EFI分区。至于WIN系统下,由于过程比较繁琐,再加上没有太多的必要性。因此本章节只讲解在MAC系统下。
全栈程序员站长
2022/07/23
5.5K0
安装CLOVER引导器到硬盘EFI分区
最新版黑苹果MacOS 10.14 Mojave安装教程
下载链接:https://pan.baidu.com/s/1sk6tYbCZ0riy0I6Vasagwg 提取码:whcw
全栈程序员站长
2022/07/01
5.3K0
最新版黑苹果MacOS 10.14 Mojave安装教程
安装win10+黑苹果双系统零基础教程
镜像链接迅雷资源https://mirrors.dtops.cc/iso/MacOS/daliansky_macos/macOS%20Catalina%2010.15.4%2819E287%29%20Installer%20for%20Clover%205109%20and%20WEPE%20Support%20UEFI%20and%20MBR.dmg
全栈程序员站长
2022/08/12
3.1K0
安装win10+黑苹果双系统零基础教程
黑苹果基础(一)
在这里先不讨论传统BIOS引导,传统引导方式需要模拟UEFI,推荐使用Clover模拟,OC模拟还有很多问题。
GOOPHER
2022/03/31
1.2K0
黑苹果基础(一)
BIOS与UEFI介绍与使用
描述:英特尔已经宣布计划在2020年之前将所有芯片组完全替换为UEFI,所以说BIOS即将迎来生命周期的最后一个周期;但是我们现在UEFI附带的新电脑仍将其称为“BIOS”,符合用户的叫法;
全栈工程师修炼指南
2022/09/28
3.9K0
BIOS与UEFI介绍与使用
黑苹果安装手记(一)
自从苹果的电脑采用了Intel的处理器,苹果的系统被黑客破解之后,能安装在Intel CPU与部分AMD CPU上,从而就出现了一大批非苹果电脑的设备,而使用苹果操作系统的机器。这一类就被称为黑苹果(Hackintosh)。简单的说,就是在非苹果电脑上,安装的苹果系统。
简单并不简单
2019/12/17
4.1K0
黑苹果安装手记(一)
Clover引导简明教程
选择 Boot macOS with selected options 启动 出现错误画面拍照发群里寻求帮助。
慕白
2020/01/02
17.2K1
Clover引导简明教程
通过CLOVER 引导Windows与Linux双系统
可能有些朋友对CLOVER还不了解,因为有很多大神已经做过介绍,我这就做个引用吧。 黑苹果引导工具 Clover 配置详解(转自[三个表哥])
全栈程序员站长
2022/07/23
11.7K1
通过CLOVER 引导Windows与Linux双系统
硬件笔记之删除UEFI启动项
安装黑苹果和linux需要更改uefi,装回windows在主板bios页面发现有苹果和linux的uefi启动项残余;
Jetpropelledsnake21
2021/07/08
2.5K0
动手装一台 iMac - 黑苹果系统安装
之前的文章都是硬件及一些准备工作,本篇来介绍如何把 macOS 安装到自己攒的机器上。看到这里,如果没有下定折腾的决心,之前配的那台 PC 完全可以当一个游戏机无痛安装 Windows 使用,如果你准备好了,恭喜踏入黑果的不归路,只能说,一直黑果一直爽。(手动斜眼)
用户2932962
2019/06/15
5.4K0
win10笔记本电脑双系统 安装黑苹果系统macOS 小白黑苹果乐园下载资源简便安装黑苹果方式,非常详细,还有资源![通俗易懂]
(1) macOS High Sierra 10.13.6(17G65) Clover 2.4k r4596黑苹果原版安装镜像
全栈程序员站长
2022/06/26
4.4K0
win10笔记本电脑双系统 安装黑苹果系统macOS 小白黑苹果乐园下载资源简便安装黑苹果方式,非常详细,还有资源![通俗易懂]
win10+黑苹果 单硬盘 双系统 超简单安装 一看就会「建议收藏」
注意:此教程全机型通用 ,只需要替换相关的efi文件即可。安装黑苹果的教程已经很多了,本人学的皮毛只适合跟我配置差不多的笔记本电脑,比如神州系列啥的。如果本文出现任何问题请及时指正,谢谢。 电脑型号 Notebook W65KJ1_KK1 笔记本电脑 (扫描时间:2019年11月23日) 操作系统 Windows 10 专业版 64位 ( DirectX 12 ) 处理器 英特尔 Core i3-8100 @ 3.60GHz 四核 主板 蓝天(CLEVO) 主板 ( 100 Series/C230 Series 芯片组 Family – A144 ) 内存 8 GB ( 英睿达 DDR4 2400MHz ) 主硬盘 日立 HGST HTS721010A9E630 ( 1 TB / 7200 转/分 ) 显卡 Nvidia GeForce GTX 1050 Ti ( 4 GB ) 显示器 友达 AUO60ED ( 15.5 英寸 ) 声卡 瑞昱 ALC269 @ 英特尔 High Definition Audio 控制器 网卡 瑞昱 RTL8168/8111/8112 Gigabit Ethernet Controller / 蓝天(CLEVO)
全栈程序员站长
2022/08/30
13.3K0
win10+黑苹果 单硬盘 双系统 超简单安装 一看就会「建议收藏」
关于启动引导的那些事儿(下) : UEFI与GPT
MBR的缺点主要在于他是个程序。引导程序和磁盘分区原本是不太相关的两个事情,但是MBR却用一种及其原始的方式把它们混合在了一起。此外,MBR程序本身也带来了不少麻烦。由于MBR运行在实模式,因此它的编写与引导过程的其它程序有诸多不同。而且由于MBR是直接写在引导扇区的,并不是以文件的形式存在,因此对MBR进行管理也十分麻烦。缺少程序校验也使黑客可以通过更改MBR,让病毒在操作系统引导前就完成载入。总而言之,MBR的设计真的太过时了。
KAAAsS
2022/01/14
3.3K0
如何在硬盘上建立第二个 EFI 分区?
我们可以看到,这块1TB的固态硬盘上已经存在了一个 EFI 分区,设备地址为:disk0s1,它位于 /dev/disk0 的首部,后面的空间是建立了一个 Apple_APFS 的容器,它占满了所剩的磁盘空间,/dev/disk2 是容器的具体布局和分区,我们今天要操作的磁盘是 /dev/disk0,所以/dev/disk2部分的内容可直接忽略。
轩源
2024/09/29
5620
如何在硬盘上建立第二个 EFI 分区?
黑苹果怎么安装clover(clover引导教程)
处理器 Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz 内存容量 16.0GB 显卡 NVIDIA GeForce GTX 660 硬盘 1、Samsung SSD 840 EVO 120GB (120GB) 2、SanDisk SD8SBBU240G1122 (240GB) 主板 B85-HD3 (x.x) 网卡 1、Realtek RTL8192CU Wireless LAN 802.11n USB 2.0 Network Adapter 2、Realtek PCIe GBE Family Controller 声卡 NVIDIA High Definition Audio 显示器 2769 分辨率:1920×1080
全栈程序员站长
2022/08/01
5.4K0
黑苹果怎么安装clover(clover引导教程)
黑苹果安装详细过程
此教程仅用于初入黑苹果的小白学习交流经验,每个人的环境配置不同,不能一概而论,如若安装过程出现任何意外将与本人无关。鉴于网上有很多大佬写的教程,但以我的角度来看(才识浅薄),有些细节并没有提到,不懂得话会比较懵,所以才有了写这篇的想法。第一次写,请多指教,有写错的地方还请各路大神指正,老鸟看看就好,勿喷(感谢)
全栈程序员站长
2022/07/01
2.2K0
黑苹果安装详细过程
黑苹果完整安装教程,内含后续系统优化「建议收藏」
这类主讲装双系统,VM虚拟机参考博客https://www.jianshu.com/p/5f10473f9047 虚拟机下载:https://www.vmware.com/go/getworkstation-win 秘钥:YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV
全栈程序员站长
2022/08/28
7.8K0
黑苹果完整安装教程,内含后续系统优化「建议收藏」
黑苹果的历史
点击上方蓝色“程序猿DD”,选择“设为星标” 回复“资源”获取独家整理的学习资料! 来源 | 公众号「云原生实验室」 楔子:第一台“黑苹果” 如果按照“黑苹果”的定义 —— 在一台没有苹果 Logo 的电脑上运行苹果公司开发的操作系统 —— 那么全世界第一台“黑苹果”应该诞生于 24 年前。1996 年,苹果将 Macintosh 电脑切换到 IBM 的 PowerPC 架构。时任苹果 CEO Gil Amelio 借此机会,与一些使用和 Macintosh 同款 CPU 和主板的厂商(如摩托罗拉)签约,
程序猿DD
2023/04/04
2.1K0
黑苹果的历史
推荐阅读
相关推荐
黑苹果MacOS Big Sur 11.0 安装教程及驱动工具
更多 >
LV.1
澳门大学在读博士
目录
  • AggregationBuilders.terms:一段时间内,某个字段取值的数量排名前几的聚合
  • date_histogram: 一段时间之内,时间字段按照时间间隔的聚合
  • subAggregation:一段时间内,按照一定的时间间隔,每个间隔段内字段每个取值的数量聚合
  • 分页获取数据
  • AggregationBuilders.cardinality:获取某个字段的唯一取值数量
  • bool查询
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档