ElasticSearch的DSL查询
ElasticSearch的DSL查询
准备工作
创建测试方法,初始化测试结构。
import org.apache.http.HttpHost;
import org.apache.lucene.search.TotalHits;
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.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;
import java.util.Map;public class DemoTest {private RestHighLevelClient client;/*** * 因为下面会重复使用输出语句所以就单独抽出来封装了** @param response 查询结果响应体*/public static void handelResponse(SearchResponse response) {// 查询的总数TotalHits total = response.getHits().getTotalHits();System.out.println("total===>" + total);SearchHits searchHits = response.getHits();// 输出查询结果searchHits.forEach(hit -> {// 查询时JSON数据,可以使用实体将其转换。String json = hit.getSourceAsString();System.out.println(json);// 高亮返回体Map<String, HighlightField> map = hit.getHighlightFields();if (map != null) {System.out.println("-----------------高亮显示---------------");HighlightField highlightField = map.get("name");System.out.println("name===>" + highlightField.getName());System.out.println("fragments===>" + highlightField.getFragments()[0]);}});}@BeforeEachvoid setup() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.3.98:9200")));}@AfterEachvoid teardown() throws IOException {this.client.close();}
}
DSL查询
普通查询全部
new SearchRequest("hotel")
查询索引库名称。
@Test
void testMatchAll() throws IOException {// 指定查询的索引库SearchRequest request = new SearchRequest("hotel");// 查询全部内容request.source().query(QueryBuilders.matchAllQuery());// 得到查询返回体,传入返回体到封装的返回体输出SearchResponse response = client.search(request, RequestOptions.DEFAULT);handelResponse(response);
}
对应控制台。
# 查询所有
GET /_search
{"query": {"match_all": {}}
}
match查询-单字段查询
// match查询-单字段查询
@Test
void testMatch() throws IOException {// 指定查询的索引库SearchRequest request = new SearchRequest("hotel");// 查询内容request.source().query(QueryBuilders.matchQuery("all", "如家"));// 得到查询返回体,传入返回体到封装的返回体输出SearchResponse response = client.search(request, RequestOptions.DEFAULT);handelResponse(response);
}
对应控制台。
# match,根据单字段查询,推荐使用
GET /hotel/_search
{"query": {"match": {"all": "外滩如家"}}
}
match查询-多字段查询
@Test
void testMultiMatchQuery() throws IOException {// 指定查询的索引库SearchRequest request = new SearchRequest("hotel");// 查询内容request.source().query(QueryBuilders.multiMatchQuery("如家", "name", "business"));// 得到查询返回体,传入返回体到封装的返回体输出SearchResponse response = client.search(request, RequestOptions.DEFAULT);handelResponse(response);
}
对应控制台。
# multi_match 多字段查询,不推荐,性能低
GET /hotel/_search
{"query": {"multi_match": {"query": "外滩如家","fields": ["name","brand","business"]}}
}
精确查询
@Test
void termQuery() throws IOException {// 指定查询的索引库SearchRequest request = new SearchRequest("hotel");// 查询内容-精确查找request.source().query(QueryBuilders.termQuery("city", "深圳"));// 得到查询返回体,传入返回体到封装的返回体输出SearchResponse response = client.search(request, RequestOptions.DEFAULT);handelResponse(response);
}
对应控制台。
# 精确查找-term,不会分词
GET /hotel/_search
{"query": {"term": {"city": {"value": "上海"}}}
}
范围查找
@Test
void testRange() throws IOException {// 指定查询的索引库SearchRequest request = new SearchRequest("hotel");// 查询内容request.source().query(QueryBuilders.rangeQuery("price").gte(100).lt(150));// 得到查询返回体,传入返回体到封装的返回体输出SearchResponse response = client.search(request, RequestOptions.DEFAULT);handelResponse(response);
}
对应控制台。
# range 范围查询
GET /hotel/_search
{"query": {"range": {"price": {"gte": 100,"lte": 300}}}
}
布尔查询
@Test
void testBoolean() throws IOException {// 指定查询的索引库SearchRequest request = new SearchRequest("hotel");// 查询内容BoolQueryBuilder query = QueryBuilders.boolQuery();query.must(QueryBuilders.termQuery("city", "杭州"));query.filter(QueryBuilders.rangeQuery("price").lt(250));// 得到查询返回体,传入返回体到封装的返回体输出SearchResponse response = client.search(request, RequestOptions.DEFAULT);handelResponse(response);
}
对应控制台。
# 不等于gt,lt不等于
GET /hotel/_search
{"query": {"range": {"FIELD": {"gt": 10,"lt": 20}}}
}
排序、分页
@Test
void testFrom() throws IOException {// 页码,每页大小int page = 1, size = 5;// 指定查询的索引库SearchRequest request = new SearchRequest("hotel");// 查询内容request.source().query(QueryBuilders.matchAllQuery());request.source().from((page - 1) * size).size(5);request.source().sort("price", SortOrder.ASC);// 得到查询返回体,传入返回体到封装的返回体输出SearchResponse response = client.search(request, RequestOptions.DEFAULT);handelResponse(response);
}
高亮
@Test
void testHighLighter() throws IOException {// 指定查询的索引库SearchRequest request = new SearchRequest("hotel");// 查询内容request.source().query(QueryBuilders.matchQuery("all", "如家"));request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));// 得到查询返回体,传入返回体到封装的返回体输出SearchResponse response = client.search(request, RequestOptions.DEFAULT);handelResponse(response);
}
对应控制台。
# 搜索结果高亮显示,默认字段必须与高亮字段一致,默认是em标签
GET /hotel/_search
{"query": {"match": {"all": "如家"}},"highlight": {"fields": {"name": {"require_field_match": "false","pre_tags": "<i>","post_tags": "</i>"}}}, "from": 0,"size": 20
}
相关文章:
ElasticSearch的DSL查询
ElasticSearch的DSL查询 准备工作 创建测试方法,初始化测试结构。 import org.apache.http.HttpHost; import org.apache.lucene.search.TotalHits; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRespo…...
每天定时杀spark进程
##编写shell脚本 #!/bin/bash arr(“zhangsan” “lisi” “wangwu”) for i in “${arr[]}” do processps -ef|grep ${i}| grep -v "grep"| awk {print $2} kill -9 ${process} done ##每日定时杀手动启动的进程 0 19 * * * cd /kill_process && sh kil…...
win10 安装kubectl,配置config连接k8s集群
安装kubectl 按照官方文档安装:https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/ curl安装 (1)下载curl安装压缩包: curl for Windows (2)配置环境变量: 用户变量: Path变…...
Calico IPIP和BGP TOR的数据包走向
IPIP Mesh全网互联 文字描述 APOD eth0 10.7.75.132 -----> APOD 网关 -----> A宿主机 cali76174826315网卡 -----> Atunl0 10.7.75.128 封装 ----> Aeth0 10.120.181.20 -----> 通过网关 10.120.181.254 -----> 下一跳 BNODE eth0 10.120.179.8 解封装 --…...
静态成员主要用于提供与类本身相关的功能或数据,有什么应用场景
静态成员(包括静态方法和静态属性)在JavaScript中常用于多种应用场景,它们为类提供了与类本身直接相关而不是与实例相关的功能或数据。以下是一些常见的应用场景: 工厂方法 静态方法可以作为工厂方法,用于创建类的实…...
在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)
在线考试管理系统目录 目录 基于Springboot的在线考试管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 管理员功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主…...
C语言-----数据在内存中的存储(1)
1.整数在内存中的存储 我们之前就了解过整数的二进制写法分别有3种,分别为原码,反码,补码。整型在内存中存储的是补码。 原码,反码,补码都有自己的符号位和数值位,符号位为1时,则表示负数&…...
Ribbon有哪些负载均衡策略
负载均衡类都实现了IRule接口。 RandomRule:随机的选用一个实例 RoundRobinRule:轮询的使用实例 RetryRule:在轮询的基础上加了一个错误重试机制,在deadline时间内会不断的重试 WeightResponeTimeRule:根据权重去做…...
websocket多级nginx代理
在使用多层Nginx代理时,WebSocket的连接可能会遇到一些问题,因为WebSocket连接是持久化的,它需要Upgrade头部来确认升级到WebSocket协议。在多层代理的情况下,每层代理可能会修改或丢失这个Upgrade头部信息。 为了确保WebSocket能…...
【python从入门到精通】-- 第四战:语句汇总
🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…...
【NC50937】货仓选址
题目 货仓选址 二分,前缀和,数学推导 思路 由题意可知货仓的位置是可以和商店的位置重合的。首先应该将商店的坐标从小到大排序,然后假设商店的坐标为 a i a_i ai,货仓的坐标为 x x x,货仓左侧第一家商店&#x…...
Nginx配置使用笔记
Nginx配置使用笔记 前言 官网下载压缩包https://nginx.org/ 解压完成后当前目录cmd输入nginx指令启动 访问http://localhost:80确认启动成功 1.部署前端项目 部署前端项目到路径E:\Workspaces\Vscode\app-web 2.0配置nginx.conf文件 在nginx安装的conf目录下新建一个文件夹l…...
GridLayoutManager 中的一些坑
前言 如果GridLayoutManager使用item的布局都是wrap_cotent 那么会在布局更改时会出现一些出人意料的情况。(本文完全不具备可读性和说教性,仅为博主方便查找问题) 布局item: <!--layout_item.xml--> <?xml version"1.0&qu…...
算法实验二 矩阵最小路径和 LIS
算法实验课二 矩阵最小路径和 leetcode裸题 最小路径和 给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入&…...
Apache Paimon实时数据糊介绍
Apache Paimon 是一种湖格式,可以使用 Flink 和 Spark 构建实时 数据糊 架构,用于流式和批处理操作。Paimon 创新地将湖格式和 LSM(日志结构合并树)结构相结合,将实时流式更新引入湖架构中。 Paimon 提供以下核心功能: 实时更新: 主键表支持大规模更新的写入,具有非常…...
计算机网络:数据链路层 - 可靠传输协议
计算机网络:数据链路层 - 可靠传输协议 可靠传输概念停止-等待协议 SW回退N帧协议 GBN选择重传协议 SR 可靠传输概念 如下所示,帧在传输过程中受到干扰,产生了误码。接收方的数据链路层,通过真伪中的真检验序列 FCS 字段的值&…...
苍穹外卖07(缓存菜品,SpringCache,缓存套餐,添加购物车菜品和套餐多下单,查看购物车,清除购物车,删除购物车中一个商品)
目录 一、缓存菜品 1 问题说明 2 实现思路 3 代码开发:修改DishServiceImpl 4 功能测试 二、SpringCache 1. 介绍 2. 使用语法 1 起步依赖 2 使用要求 3 常用注解 4 SpEL表达式(了解备用) 5 步骤小结 3.入门案例 1 准备环境 2 使用入门 1 引导类上加…...
C语言第三十八弹---编译和链接
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 编译和链接 1、翻译环境和运行环境 2、翻译环境 2.1、预处理(预编译) 2.2、编译 2.2.1、词法分析 2.2.2、语法分析 2.2.3、语义分…...
无人售货奶柜:开启便捷生活的新篇章
无人售货奶柜:开启便捷生活的新篇章 在这个快节奏的现代生活中,科技的革新不仅为我们带来了前所未有的便利,更在不经意间改变着我们的日常。其中,无人售货技术的出现,尤其是无人售货奶柜,已经成为我们生活…...
STM32为什么不能跑Linux?
STM32是一系列基于ARM Cortex-M微控制器的产品,它们主要用于嵌入式系统中。而Linux则是一个开源的类Unix操作系统,主要面向的是桌面电脑、服务器等资源丰富的计算机。虽然理论上可以将Linux移植到STM32上运行,但是由于两者之间存在着很多技术…...
Dubbo 3.x源码(18)—Dubbo服务引用源码(1)
基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo的服务导出的源码,在DubboBootstrapApplicationListener#startSync方法中,在调用了exportServices方法进行服务导出之后,立即调用了referServices方法…...
设计模式:工厂模式和抽象工厂模式的区别
定义 工厂模式(Factory Pattern)通常指的是工厂方法模式(Factory Method Pattern),它定义了一个创建对象的方法,由子类决定要实例化的类。工厂方法让类的实例化推迟到子类。 抽象工厂模式(Abstract Factory Pattern)提供了一个接口,用于创建相关或依赖对象的家族,而…...
python面试题(36~50)
36、如何取一个整数的绝对值? 这可以通过abs函数来实现。 abs(2) #> 2 abs(-2) #> 2 37、如何将两个列表组合成一个元组列表? 可以使用zip函数将列表组合成一个元组列表。这不仅仅限于使用两个列表。也适合3个或更多列表的情况。 a [a,b,c] b [1,2,3] [(k,v) fo…...
Vue 样式技巧总结与整理[中级局]
SFC(单文件组件)由 3 个不同的实体组成:模板、脚本和样式。三者都很重要,但后者往往被忽视,即使它可能变得复杂,且经常导致挫折和 bug。 更好的理解可以改善代码审查并减少调试时间。 这里有 7 个奇技淫巧…...
cesium加载.tif格式文件
最近项目中有需要直接加载三方给的后缀名tif格式的文件 <script src"https://cdn.jsdelivr.net/npm/geotiff"></script> 或者 yarn add geotiff npm install geotiff 新建tifs.js import GeoTIFF, { fromBlob, fromUrl, fromArrayBuffer } from geotif…...
分布式全闪占比剧增 152%,2023 年企业存储市场报告发布
近日,IDC 发布了 2023 年度的中国存储市场报告。根据该报告,在 2023 年软件定义存储的市场占比进一步扩大,分布式全闪的增长尤其亮眼,其市场份额从 2022 年的 7% 剧增到 2023 年的 17.7%,增长了 152%。 01 中国企业存…...
LeetCode 707. 设计链表(单链表、(非循环)双链表 模板)
你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点…...
深入了解Flutter中Overlay的介绍以及使用
Flutter Overlay 介绍 在 Flutter 中,Overlay 是一种特殊的 Widget,它可以用来在应用程序的其他部分之上显示内容。Overlay 非常适合用于显示模态对话框、弹出菜单、工具提示等。 Overlay 的工作原理 Overlay 位于 Flutter 的渲染树之外,这…...
文本直接生成2分钟视频,即将开源模型StreamingT2V
Picsart人工智能研究所、德克萨斯大学和SHI实验室的研究人员联合推出了StreamingT2V视频模型。通过文本就能直接生成2分钟、1分钟等不同时间,动作一致、连贯、没有卡顿的高质量视频。 虽然StreamingT2V在视频质量、多元化等还无法与Sora媲美,但在高速运…...
时序预测 | Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测
时序预测 | Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测 目录 时序预测 | Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测(完整源码…...
网站设计模板/兰州seo公司
有什么用? 2017年初,整个全景相机产业经历了一轮小爆发。除了像Insta 360、德图等几家创业公司外,小米、努比亚等几家传统手机厂商在2017年4月份也相继发布了自己的消费级全景相机,紧接着,Facebook、Google互联网巨头…...
wordpress关闭手机访问/seo视频教程
shell脚本启停项目进程shell脚本强制停止指定名称进程shell脚本启动logstashshell脚本强制停止指定名称进程 关闭logstash 方式一 #!/bin/bash#注意事项 logstash_pid 和 之间不能有空格,否则会将logstash_pid当成单独的命令执行报错.logstash_pidps aux|grep …...
西瓜网络深圳网站建设 东莞网站建设/微信销售平台
VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第28章:VC++串口封装类(附源码) 源代码demo已上传到百度网盘:永久生效 CSerialCom 封装了打开,发接,接收等功能! 这个代码是 class CSerialCom { public:CSerialCom(void);~CSerialCom(void);HANDLE m_hCom;C…...
我想做自己网站怎么做/seo兼职工资一般多少
这是关于数据库管理与维护的考试题库,希望报考了微软431考试人,都能顺利通过考试~~~~~~~~~~~~~转载于:https://blog.51cto.com/514143/158312...
自助网站建设系统/seo排名优化方式
题目链接 力扣 题目描述 给定一棵二叉搜索树和其中的一个节点 p ,找到该节点在树中的中序后继。如果节点没有中序后继,请返回 null 。 节点 p 的后继是值比 p.val 大的节点中键值最小的节点,即按中序遍历的顺序节点 p 的下一个节点。 示例 1…...
网站注销流程/seo优化教程下载
年轻的时候,常常以程序员自诩,涓涓代码流于键盘之下,那是何等的满足!如今已过而立,随着小儿的出生,青涩自负的青春早已作古,现在的我在做什么呢?该做些什么呢?心里的头绪…...