030 elasticsearch查询、聚合
文章目录
- 查询
- 聚合查询
- RestHighLevelClient
- ElasticsearchRestTemplat
SpringData对ES客户端的封装:ElasticsearchRestTemplate
SpringData对CRUD的封装:ElasticsearchRepository
原生ES客户端:RestHighLevelClient
查询
package com.xd.cubemall.sdes;import com.xd.cubemall.search.CubemallSearchApplication;
import com.xd.cubemall.search.model.Blog;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest(classes = CubemallSearchApplication.class)
public class QueryTest {@Autowiredprivate ElasticsearchRestTemplate template;@Testpublic void testQuery1() {NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchAllQuery()).build();SearchHits<Blog> searchHits = template.search(query, Blog.class);//取总记录数long totalHits = searchHits.getTotalHits();System.out.println("总记录数:" + totalHits);//取文档列表List<SearchHit<Blog>> hits = searchHits.getSearchHits();hits.stream().forEach(h-> System.out.println(h));}@Testpublic void testQuery2() throws Exception {NativeSearchQuery query = new NativeSearchQueryBuilder()//查询设置.withQuery(QueryBuilders.multiMatchQuery("看电影","title","content"))//过滤条件,可以设置多个,支持查询条件.withFilter(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("title", "电影")).should(QueryBuilders.termQuery("content","祝福")))
// .withFilter(QueryBuilders.termQuery("mobile", "13000000000"))//分页设置.withPageable(PageRequest.of(0, 10))//高亮设置.withHighlightBuilder(new HighlightBuilder()//高亮显示的字段.field("title").field("content")//高亮显示的前缀.preTags("<em>")//高亮显示的后缀.postTags("</em>")).build();//使用template对象执行查询SearchHits<Blog> searchHits = template.search(query, Blog.class);//取返回结果//总记录数long totalHits = searchHits.getTotalHits();System.out.println("总记录数:" + totalHits);//取文档列表List<SearchHit<Blog>> hits = searchHits.getSearchHits();hits.stream().forEach(hit->{//取文档对象Blog blog = hit.getContent();//System.out.println(blog);//取高亮结果Map<String,List<String>> highlightFields = hit.getHighlightFields();//System.out.println(highlightFields);String title = highlightFields.get("title").get(0);String content = highlightFields.get("content").get(0);blog.setTitle(title);blog.setContent(content);System.out.println(blog);});}
}
聚合查询
api使用方法
搜索时,请求体中包含聚合条件
在aggs属性中设置聚合条件:
value_count
max
min
avg
GET blog_1/_search
{"query": {"match_all": {}},"aggs": {"mobile_count": {"value_count": {"field": "mobile"}},"mobile_max":{"max": {"field": "mobile"}}}
}
分桶(分组)聚合
GET blog_1/_search
{"query": {"match_all": {}},"aggs": {"mobile_count": {"value_count": {"field": "mobile"}},"mobile_group":{"terms": {"field": "mobile","size": 10}}}
}
RestHighLevelClient
@Autowiredprivate RestHighLevelClient restHighLevelClient;@Testpublic void testAggs() throws IOException {SearchRequest request = new SearchRequest().indices("blog_1").source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).aggregation(new ValueCountAggregationBuilder("doc_count").field("mobile")).aggregation(new TermsAggregationBuilder("group_count").field("mobile").size(10)));SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);System.out.println(response);}
ElasticsearchRestTemplat
@Testpublic void testQuery2() throws Exception {NativeSearchQuery query = new NativeSearchQueryBuilder()//查询设置.withQuery(QueryBuilders.multiMatchQuery("看电影","title","content"))//过滤条件,可以设置多个,支持查询条件.withFilter(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("title", "电影")).should(QueryBuilders.termQuery("content","祝福")))
// .withFilter(QueryBuilders.termQuery("mobile", "13000000000"))//分页设置.withPageable(PageRequest.of(0, 10))//高亮设置.withHighlightBuilder(new HighlightBuilder()//高亮显示的字段.field("title").field("content")//高亮显示的前缀.preTags("<em>")//高亮显示的后缀.postTags("</em>")).addAggregation(new TermsAggregationBuilder("mobile_group").field("mobile")).build();//使用template对象执行查询SearchHits<Blog> searchHits = template.search(query, Blog.class);//取返回结果//总记录数long totalHits = searchHits.getTotalHits();System.out.println("总记录数:" + totalHits);//取文档列表List<SearchHit<Blog>> hits = searchHits.getSearchHits();hits.stream().forEach(hit->{//取文档对象Blog blog = hit.getContent();//System.out.println(blog);//取高亮结果Map<String,List<String>> highlightFields = hit.getHighlightFields();//System.out.println(highlightFields);String title = highlightFields.get("title").get(0);String content = highlightFields.get("content").get(0);blog.setTitle(title);blog.setContent(content);System.out.println(blog);});Aggregations aggregations = searchHits.getAggregations();ParsedStringTerms aggregation = aggregations.get("mobile_group");List<? extends Terms.Bucket> buckets = aggregation.getBuckets();buckets.forEach(e-> {System.out.println(e.getKeyAsString());System.out.println(e.getDocCount());});}相关文章:
030 elasticsearch查询、聚合
文章目录 查询聚合查询RestHighLevelClientElasticsearchRestTemplat SpringData对ES客户端的封装:ElasticsearchRestTemplate SpringData对CRUD的封装:ElasticsearchRepository 原生ES客户端:RestHighLevelClient 查询 package com.xd.cube…...
前端工程启动工具
一些思考 在公司项目中,需要启一个新的前端工程(一个基于Webpack的React工程)。因为同一个项目中有其他的前端工程,我们最开始想的是参考另外一个工程的配置重启一个新的工程,但是又因为原来的工程用的库版本都比较老…...
游戏逆向基础-跳出游戏线程发包
附加游戏后下断点 bp ws2_32.send send函数断下后,可以看到数据地址每次都一样 可以说明这个游戏是线程发包,所以直接在数据窗口中转到这个地址,然后对这个地址下硬件写入断点。 下了硬件写入断点后可以一层一层往上面跟,确定写…...
做海外网站需要准备什么
一,购买域名 在租用国外服务器之前,您需要购买域名。域名是访问网站的标志,也是网站品牌的一部分。因此,在购买域名时,需要考虑域名的可记忆性、简短性和搜索性,使网站更容易被用户记住。 二,租…...
通过OpenCV实现 Lucas-Kanade 算法
目录 简介 Lucas-Kanade 光流算法 实现步骤 1. 导入所需库 2. 视频捕捉与初始化 3. 设置特征点参数 4. 创建掩模 5. 光流估计循环 6. 释放资源 结论 简介 在计算机视觉领域,光流估计是一种追踪物体运动的技术。它通过比较连续帧之间的像素强度变化来估计图…...
7、Vue2(二) vueRouter3+axios+Vuex3
14.vue-router 3.x 路由安装的时候不是必须的,可以等到使用的时候再装,如果之前没有安装的话,可以再单独安装。之前的终端命令行不要关闭,再重新开一个,还需要再package.json文件的依赖中添加。 如果忘记之前是否有安…...
最新PHP礼品卡回收商城 点卡回收系统源码_附教程
最新PHP礼品卡回收商城 点卡回收系统源码_附教程 各大电商平台优惠券秒杀拼团限时折扣回收商城带余额宝 1、余额宝理财 2、回收、提现、充值、新订单语音消息提醒功能 3、带在线客服 4、优惠券回收功能 源码下载:https://download.csdn.net/download/m0_66047…...
MySQL数据库和表的基本操作
文章目录 一、数据库的基础知识 背景知识数据库的基本操作二、数据类型 字符串类型数值类型日期类型三、表的基本操作 创建表查看表结构查看所有表删除表 一、数据库的基础知识 背景知识 MySQL是一个客户端服务器结构的程序 主动发送数据的这一方,客户端(client…...
SAM应用:医学图像和视频中的任何内容分割中的基准测试与部署
医学图像和视频中的任何内容分割:基准测试与部署 目录 摘要:一、引言1.1 SAM2 在医学图像和视频中的应用 二.结果2.1 数据集和评估协议2.2 二维图像分割的评估结果 三 讨论四 局限性和未来的工作五、方法5.1数据来源和预处理5.2 微调协议5.3 评估指标 总…...
Qt消息对话框
问题对话框 对应API [static] QMessageBox::StandardButton QMessageBox::question( QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons StandardButtons(Yes | No), QMessageBox::StandardButton defaultButt…...
FreeRTOS的队列管理
“队列”提供了一种任务到任务、任务到中断和中断到任务的通信机制。 队列特性 数据存储 队列可以容纳有限数量的固定大小的数据项。队列可以容纳的最大项目数称为其“长度”。每个数据项的长度和大小都是在创建队列时设置的。 队列通常用作先进先出(FIFO…...
买卖股票的最佳时机(动态规划方法总结)
总结一下,买卖股票系列的动态规划思想,贪心解法或者其他解法不做描述。 总结 121. 买卖股票的最佳时机 只有一次交易机会,每天有两种状态:持有股票和不持有股票; 122. 买卖股票的最佳时机 II 有多次交易机会&#x…...
KubeSphere安装mysql8.4.0
背景 KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,完全开源,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。 安装组件前提&am…...
SpringBoot项目热部署-devtools
DevTools 会使用两个类加载器(一个用于加载不变的类,一个用于加载可能会变化的类),每次重启只重新加载管理变化的类的加载器,因此会快很多 1.导入依赖 <dependency> <groupId>org.springframework.boot&l…...
从MySQL到OceanBase离线数据迁移的实践
本文作者:玉璁,OceanBase 生态产品技术专家。工作十余年,一直在基础架构与中间件领域从事研发工作。现负责OceanBase离线导数产品工具的研发工作,致力于为 OceanBase 建设一套完善的生态工具体系。 背景介绍 在互联网与云数据库技…...
ifconfig 和 ip addr
1. 工具所属套件 ifconfig:属于较老的 net-tools 套件。曾是 Unix 和 Linux 系统上广泛使用的工具。ip addr:属于较新的 iproute2 套件。它取代了 ifconfig,并逐渐成为现代 Linux 系统上更常用的工具。 2. 功能覆盖范围 ifconfigÿ…...
NCCL报错
1、报错信息: raise RuntimeError("Distributed package doesnt have NCCL " "built in") RuntimeError: Distributed package doesnt have NCCL built in 2、报错原因: windows系统不支持nccl,采用gloo; …...
域7:安全运营 第16章 安全运营管理
第七域包括 16、17、18、19 章。 第七域所涵盖的广泛知识点,与我们的安全运营工作之间存在着高度的契合性。这些知识点不仅为我们的安全运营提供了有力的理论支撑,还使得SOC(安全运营中心)在日常运作中能够更加高效地发挥作用。通…...
研发线上事故风险解读之数据库存储
专业在线打字练习平台-巧手打字通,只输出有价值的知识。 一 前言 本文继续基于《线上事故案例集》,进一步深入梳理线上事故数据存储方面的问题点,重点关注数据库存储在使用和优化过程中可能出现的问题,旨在为读者提供具有实践指导…...
react hooks中在setState后输出state为啥没有变化,如何解决
在 React Hooks 中,setState 的概念被 useState 或 useReducer 钩子所替代。与类组件中的 setState 一样,这些钩子也是异步更新状态的。因此,如果你尝试在调用 setState(即 setXXX 函数)后立即读取状态值,你…...
Allegro等长设置翻车实录:拓扑模板法的3个坑与手工PinPair的救赎
Allegro等长设计避坑指南:从拓扑模板到精准PinPair的实战演进在高速PCB设计中,等长匹配如同精密钟表里的齿轮啮合,差之毫厘便可能导致整个系统时序崩塌。当设计从简单的点对点结构升级到多负载复杂拓扑时,Allegro用户常陷入两种典…...
AI智能体到底强在哪?为什么大家开始从“养龙虾”转向“养马”
那么AI智能体的核心能力是什么? 1、理解需求 它能分析你的真实意图,而不是只看表面的文字,比如让它整理这个月的消费情况,它明白之后,会读取账单,做分类统计,生成总结,最后输出图表。…...
告别网盘客户端!用Alist+RaiDrive把百度云盘变成电脑本地文件夹(保姆级图文教程)
用AlistRaiDrive实现网盘本地化管理的终极方案 你是否厌倦了电脑上安装多个网盘客户端,不仅占用系统资源,操作还繁琐割裂?每次上传下载文件都要在不同客户端间切换,效率低下。现在,通过Alist和RaiDrive的组合…...
销售怎么通过各种方法获取电话号码
第一种就是那个用爬虫电话号码,然后再打电话给客户。第二种是在别人的挪车电话看车挪车电话,然后再打电话找客户。第三就是。扫楼一顿顿的扫,第四就是这个那种商店,一个个的去问陌拜地推一个个的问店子要不要贷款,去问…...
Owl-Alpha 新手快速上手指南
在处理大规模数据或构建高性能应用时,我们常常会遇到一个棘手的问题:如何在不阻塞主线程的情况下,高效地执行耗时任务?无论是处理图像、解析大型文件,还是进行复杂的数学运算,传统的单线程模式往往会让界面…...
淘宝淘金币自动化脚本终极指南:如何每天节省25分钟实现智能任务管理
淘宝淘金币自动化脚本终极指南:如何每天节省25分钟实现智能任务管理 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taoji…...
告别坐标点击!用Poco精准定位UI控件,让你的Airtest安卓自动化脚本更稳定
告别坐标点击!用Poco精准定位UI控件,让你的Airtest安卓自动化脚本更稳定每次UI微调就导致脚本大面积失效?分辨率变化让精心编写的自动化测试瞬间崩溃?作为从坐标点击转型到控件识别的实践者,我深刻理解这种挫败感。三年…...
Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间
Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾为Windows系统越来越慢而烦…...
【C++】零基础入门 · 第 6 节:数组
上一节我们学习了函数,知道了如何把代码封装起来方便复用。但在实际编程中,你很快就会遇到一个问题:如果要存储 100 个学生的成绩,难道要定义 100 个变量吗?这显然不现实。数组就是 C++ 给出的答案——它让我们能用一个变量名管理一组相同类型的数据。 1. 为什么需要数组…...
OpenCore Legacy Patcher完整指南:让老旧Mac焕发新生,运行最新macOS
OpenCore Legacy Patcher完整指南:让老旧Mac焕发新生,运行最新macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹…...
