微服务day09

DSL查询

快速入门

GET /items/_search
{"query": {"match_all": {}}
}

叶子查询

GET /items/_search
{"query": {"match_all": {}}
}GET /items/_search
{"query": {"multi_match": {"query": "脱脂牛奶","fields": ["name"]}}
}GET /items/_search
{"query": {"term": {"price": {"value": "80900"}}}
}GET /items/_search
{"query": {"range": {"price": {"gte": 100000,"lte": 1000000}}}
}GET /items/_search
{"query": {"ids": {"values": ["688000","1861100"]}}
}

复合查询

案例

 

GET /items/_search
{"query": {"bool": {"must": [{"match":{"name":"智能手机"}}],"filter": [{"term":{"brand":"华为"}},{"range": {"price": {"gte": 90000,"lte": 159900}}}]}}
}

排序和分页

排序案例

GET /items/_search
{"query": {"match_all": {}},"sort": [{"sold": {"order": "desc"}},{"price":{"order": "asc"}}]
}#排序简写
GET /items/_search
{"query": {"match_all": {}},"sort": [{"sold":  "desc"},{"price": "asc"}]
}

分页

分页案例

#排序分页
GET /items/_search
{"query": {"match_all": {}},"sort": [{"sold":  "desc"},{"price": "asc"}],"from": 0,"size": 10
}

高亮显示

默认情况下添加的标签就是 em。

返回值将高亮字段放在highlight中,不会修改源数据。

GET /items/_search
{"query": {"multi_match": {"query": "脱脂牛奶","fields": ["name"]}},"highlight": {"fields": {"name":{"pre_tags": "<em>","post_tags": "</em>"}}}
}
GET /items/_search
{"query": {"multi_match": {"query": "脱脂牛奶","fields": ["name"]}},"highlight": {"fields": {"name":{}}}
}

查询结果相同。

结果:

{"_index" : "items","_type" : "_doc","_id" : "12179607155","_score" : 22.290178,"_source" : {"id" : "12179607155","name" : """【沃尔玛】艾思达/ASDA纯牛奶 灭菌乳 早餐奶 牛奶 英国 进口 全脂\脱脂\部分脱脂 部分脱脂牛奶 1L*6""","price" : 96300,"image" : "https://m.360buyimg.com/mobilecms/s720x720_jfs/t5977/320/3555243042/134144/38730483/59546920Nbe3ddc70.jpg!q70.jpg.webp","category" : "牛奶","brand" : "ASDA","sold" : 0,"commentCount" : 0,"isAD" : false,"updateTime" : 1556640000000},"highlight" : {"name" : ["""【沃尔玛】艾思达/ASDA纯<em>牛</em><em>奶</em> 灭菌乳 早餐<em>奶</em> <em>牛</em><em>奶</em> 英国 进口 全<em>脂</em>\<em>脱</em><em>脂</em>\部分<em>脱</em><em>脂</em> 部分<em>脱</em><em>脂</em><em>牛</em><em>奶</em> 1L*6"""]}},

查询总结

JavaRestClient

快速入门

    @org.junit.jupiter.api.Testpublic void testList() throws IOException {//创建对象SearchRequest searchRequest = new SearchRequest("items");//构建DSLsearchRequest.source().query(QueryBuilders.matchAllQuery());//发送请求SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);//解析响应SearchHits hits = search.getHits();long value = hits.getTotalHits().value;System.out.println(value);SearchHit[] hits1 = hits.getHits();for (SearchHit hit : hits1) {String json = hit.getSourceAsString();ItemDoc bean = JSONUtil.toBean(json, ItemDoc.class);System.out.println(bean);}}

构造查询条件

案例

两种写法:

    //复杂条件查询@org.junit.jupiter.api.Testpublic void testbool() throws IOException {//        //创建对象SearchRequest searchRequest = new SearchRequest("items");//创建bool对象//        //构建DSLBoolQueryBuilder query = new BoolQueryBuilder();//添加must查询query.must(QueryBuilders.matchQuery("name","脱脂牛奶"));//添加两个filter查询query.filter(QueryBuilders.termQuery("brand","德亚"));query.filter(QueryBuilders.rangeQuery("price").lt(30000));searchRequest.source().query(query);//发送请求SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);//解析响应SearchHits hits = search.getHits();long value = hits.getTotalHits().value;System.out.println(value);SearchHit[] hits1 = hits.getHits();for (SearchHit hit : hits1) {String json = hit.getSourceAsString();ItemDoc bean = JSONUtil.toBean(json, ItemDoc.class);System.out.println(bean);}}
    @Testvoid testBool() throws IOException {// 1.创建RequestSearchRequest request = new SearchRequest("items");// 2.组织请求参数// 2.1.准备bool查询BoolQueryBuilder bool = QueryBuilders.boolQuery();// 2.2.关键字搜索bool.must(QueryBuilders.matchQuery("name", "脱脂牛奶"));// 2.3.品牌过滤bool.filter(QueryBuilders.termQuery("brand", "德亚"));// 2.4.价格过滤bool.filter(QueryBuilders.rangeQuery("price").lte(30000));request.source().query(bool);// 3.发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4.解析响应
//        handleResponse(response);//解析响应SearchHits hits = response.getHits();long value = hits.getTotalHits().value;System.out.println(value);SearchHit[] hits1 = hits.getHits();for (SearchHit hit : hits1) {String json = hit.getSourceAsString();ItemDoc bean = JSONUtil.toBean(json, ItemDoc.class);System.out.println(bean);}}

排序和分页

    @org.junit.jupiter.api.Testpublic void testSoudAndPage() throws IOException {int pageNum = 2;int pageSize = 5;//创建对象SearchRequest searchRequest = new SearchRequest("items");//构建DSL//设置分页和排序searchRequest.source().query(QueryBuilders.matchAllQuery()).from((pageNum-1)*pageSize).size(pageSize).sort("sold", SortOrder.DESC).sort("price",SortOrder.ASC);//发送请求SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);//解析响应SearchHits hits = search.getHits();long value = hits.getTotalHits().value;System.out.println(value);SearchHit[] hits1 = hits.getHits();for (SearchHit hit : hits1) {String json = hit.getSourceAsString();ItemDoc bean = JSONUtil.toBean(json, ItemDoc.class);System.out.println(bean);}}

高亮显示

    @org.junit.jupiter.api.Testpublic void testHighLight() throws IOException {//创建对象SearchRequest searchRequest = new SearchRequest("items");//构建DSLsearchRequest.source().query(QueryBuilders.matchQuery("name","脱脂牛奶"));//设置高亮,两种都可以,第二种的底层就是第一种
//        searchRequest.source().highlighter(new HighlightBuilder().field("name"));searchRequest.source().highlighter(SearchSourceBuilder.highlight().field("name"));//发送请求SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);//解析响应SearchHits hits = search.getHits();long value = hits.getTotalHits().value;System.out.println(value);SearchHit[] hits1 = hits.getHits();for (SearchHit hit : hits1) {String json = hit.getSourceAsString();ItemDoc bean = JSONUtil.toBean(json, ItemDoc.class);//获取高亮显示的字段,并写入对象中Map<String, HighlightField> hgf = hit.getHighlightFields();//判断是否存在if (CollUtil.isNotEmpty(hgf)){//存在高亮字段//根距key获取数据HighlightField hf = hgf.get("name");if (hf != null){//在添加高亮时如果字段过长就会断成几部分使用数组返回Text[] fragments = hf.getFragments();String string = fragments[0].string();//将高亮字段进行替换bean.setName(string);}}System.out.println(bean);}}

数据聚合

DSL聚合

由于出现问题详见:https://b11et3un53m.feishu.cn/wiki/WtCmwJQQDijsBikYLviceT9lnke

@Test
void testAgg() throws IOException {// 1.创建RequestSearchRequest request = new SearchRequest("items");// 2.准备请求参数BoolQueryBuilder bool = QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("category", "手机")).filter(QueryBuilders.rangeQuery("price").gte(300000));request.source().query(bool).size(0);// 3.聚合参数request.source().aggregation(AggregationBuilders.terms("brand_agg").field("brand").size(5));// 4.发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 5.解析聚合结果Aggregations aggregations = response.getAggregations();// 5.1.获取品牌聚合Terms brandTerms = aggregations.get("brand_agg");// 5.2.获取聚合中的桶List<? extends Terms.Bucket> buckets = brandTerms.getBuckets();// 5.3.遍历桶内数据for (Terms.Bucket bucket : buckets) {// 5.4.获取桶内keyString brand = bucket.getKeyAsString();System.out.print("brand = " + brand);long count = bucket.getDocCount();System.out.println("; count = " + count);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475055.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中el-select 模糊查询下拉两种方式

第一种&#xff1a;先获取所有下拉数据再模糊查询&#xff0c;效果如下 1&#xff0c;页面代码&#xff1a;speciesList是种类列表List, speciesId 是speciesList里面对应的id&#xff0c;filterable是过滤查询标签 <el-form-item label"种类" prop"species…

django启动项目报错解决办法

在启动此项目报错&#xff1a; 类似于&#xff1a; django.core.exceptions.ImproperlyConfigured: Requested setting EMOJI_IMG_TAG, but settings are not c启动方式选择django方式启动&#xff0c;以普通python方式启动会报错 2. 这句话提供了对遇到的错误的一个重要线索…

【Redis】Redis实现的消息队列

一、用list实现【这是数据类型所以支持持久化】 消息基于redis存储不会因为受jvm内存上限的限制&#xff0c;支持消息的有序性&#xff0c;基于redis的持久化机制&#xff0c;只支持单一消费者订阅&#xff0c;无法避免消息丢失。 二、用PubSub【这不是数据类型&#xff0c;是…

【AI+教育】一些记录@2024.11.16

《万字长文&#xff0c;探讨关于ChatGPT的五个最核心问题》 万字长文&#xff0c;探讨关于ChatGPT的五个最核心问题关于 ChatGPT 铺天盖地的信息让人无所适从。本文则试图提炼出五个关键问题&#xff1a;如何理解这次范式突破&#xff0c;未来能达到的技术天花板&#xff0c;行…

【计算机网络】TCP协议

一、TCP协议格式 1.报头的含义 (1) 16位源端口号/16位目的端口号 自己的端口号 和 对方的端口号 (2) 4位首部长度 表示报头长度&#xff08;TCP报头总长度 4位首部长度 * 4字节&#xff09;最少有20字节 TCP报头总长度 -> 0000 ~ 1111 -> [0, 15] * 4 -> [0, 60…

http自动发送请求工具(自动化测试http请求)

点击下载《http自动发送请求工具(自动化测试http请求)》 前言 在现代软件开发过程中&#xff0c;HTTP 请求的自动化测试是确保应用程序稳定性和可靠性的关键环节。为了满足这一需求&#xff0c;我开发了一款功能强大且易于使用的自动化 HTTP 请求发送工具。该工具基于 C# 开发…

C++ —— 剑斩旧我 破茧成蝶—C++11

江河入海&#xff0c;知识涌动&#xff0c;这是我参与江海计划的第2篇。 目录 1. C11的发展历史 2. 列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用和移动语义 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期…

Leetcode 有效的数独

这段代码解决的是 验证一个数独是否有效 的问题&#xff0c;其算法思想是基于 规则校验和状态记录。具体思想如下&#xff1a; 算法思想 核心目标&#xff1a; 检查每个数字在 同一行、同一列 和 同一个 3x3 子格 中是否重复。 状态记录&#xff1a; 使用 3 个布尔二维数组分别…

STM32设计学生宿舍监测控制系统-分享

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 本项目旨在利用STM32单片机为核心&#xff0c;结合传感器技术、无线通信技…

RabbitMQ消息可靠性保证机制4--消费端限流

7.7 消费端限流 在类似如秒杀活动中&#xff0c;一开始会有大量并发写请求到达服务端&#xff0c;城机对消息进行削峰处理&#xff0c;如何做&#xff1f; 当消息投递的速度远快于消费的速度时&#xff0c;随着时间积累就会出现“消息积压”。消息中间件本身是具备一定的缓冲…

爬虫开发工具与环境搭建——使用Postman和浏览器开发者工具

第三节&#xff1a;使用Postman和浏览器开发者工具 在网络爬虫开发过程中&#xff0c;我们经常需要对HTTP请求进行测试、分析和调试。Postman和浏览器开发者工具&#xff08;特别是Network面板和Console面板&#xff09;是两种最常用的工具&#xff0c;能够帮助开发者有效地捕…

单片机实验记录3

定时计数实验 【实验目的】 1)学习使用单片机定时/计数器 2)在程序中添加定时/计数功能&#xff0c;将相关程序部署在仿真环境中&#xff0c;观察运行的情况. 【实验内容】 必做&#xff1a;应用定时器中断和数码管&#xff0c;实现10秒倒计时功能 【实验代码】 必做&am…

(计算机毕设)基于SpringBoot+Vue的房屋租赁系统的设计与实现

博主可接毕设设计&#xff01;&#xff01;&#xff01; 各种毕业设计源码只要是你有的题目我这里都有源码 摘 要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互…

创新租赁APP开发提升用户体验与业务效率

内容概要 在这个互联网飞速发展的时代&#xff0c;租赁APP的开发成为了提升市场竞争力的重要一环。用户对租赁服务的需求与日俱增&#xff0c;而传统的方式已显得不够高效。这时候&#xff0c;创新的租赁APP就像是一道光&#xff0c;照亮了用户体验和业务效率的双重需求。通过…

【Java SE】数据库连接池

数据库连接池是一个管理数据库连接的容器。它的主要作用是分配和管理数据库连接&#xff0c;允许应用程序重复使用现有的连接&#xff0c;而不是每次都重新建立新的连接。此外&#xff0c;连接池会释放那些空闲时间超过最大限制的连接&#xff0c;从而避免因未及时释放连接而造…

SpringBoot 集成 Sharding-JDBC(一):数据分片

在深入探讨 Sharding-JDBC 之前&#xff0c;建议读者先了解数据库分库分表的基本概念和应用场景。如果您还没有阅读过相关的内容&#xff0c;可以先阅读我们之前的文章&#xff1a; 关系型数据库海量数据存储策略-CSDN博客 这篇文章将帮助您更好地理解分库分表的基本原理和实现…

多线程--常见锁策略--Java

目录 一、悲观锁VS乐观锁 1.悲观锁 2.乐观锁 二、重量级锁VS轻量级锁 1.重量级锁 2.轻量级锁 三、自旋锁 1.自旋锁概念 四、公平锁VS非公平锁 1.公平锁 2.非公平锁 3.注意 五、可重入锁和不可重入锁 六、读写锁 1.线程对于数据的访问方式 注意&#xff1a;以下讲…

基于SSM的农家乐管理系统+论文示例参考

1.项目介绍 功能模块&#xff1a;管理员&#xff08;农家乐管理、美食信息管理、住宿信息管理、活动信息、用户管理、活动报名、论坛等&#xff09;&#xff0c;普通用户&#xff08;注册登录、活动报名、客房预订、用户评价、收藏管理、模拟支付等&#xff09;技术选型&#…

jmeter--CSV数据文件设置--请求体设置变量

目录 一、示例 1、准备组织列表的TXT文件&#xff0c;如下&#xff1a; 2、添加 CSV数据文件设置 &#xff0c;如下&#xff1a; 3、接口请求体设置变量&#xff0c;如下&#xff1a; 二、CSV数据文件设置 1、CSV Data Set Config 配置选项说明 2、示例 CSV 文件内容 3、…

Redis环境部署(主从模式、哨兵模式、集群模式)

一、概述 REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库…