微服务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.mzph.cn/web/59753.shtml

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

相关文章

Linux驱动开发第2步_“物理内存”和“虚拟内存”的映射

“新字符设备的GPIO驱动”和“设备树下的GPIO驱动”都要用到寄存器地址&#xff0c;使用“物理内存”和“虚拟内存”映射时&#xff0c;非常不方便&#xff0c;而pinctrl和gpio子系统的GPIO驱动&#xff0c;非常简化。因此&#xff0c;要重点学习pinctrl和gpio子系统下的GPIO驱…

信息技术引领未来:大数据治理的实践与挑战

信息技术引领未来&#xff1a;大数据治理的实践与挑战 在信息技术日新月异的今天&#xff0c;大数据已成为企业和社会发展的重要驱动力。大数据治理&#xff0c;作为确保数据质量、安全性和合规性的关键环节&#xff0c;正面临着前所未有的实践挑战与机遇。本文将探讨信息技术…

force stop和pm clear的区别

前言&#xff1a;因为工作中遇到force stop和pm clear进程后&#xff0c;进程不能再次挂起&#xff0c;谷歌系统共性问题&#xff0c;服务类应用经清缓存后当下服务就会挂掉&#xff0c;需要系统重启才能恢复。为了更好的“丢锅”&#xff0c;需要进一步学习force stop和pm cle…

【大数据学习 | flume】flume Sink Processors与拦截器Interceptor

1. Failover Sink Processor 故障转移处理器可以同时指定多个sink输出&#xff0c;按照优先级高低进行数据的分发&#xff0c;并具有故障转移能力。 需要修改第一台服务器agent a1.sourcesr1 a1.sinksk1 k2 a1.channelsc1 a1.sources.r1.typenetcat a1.sources.r1.bindworker…

C# 字典应用

using System;using System.Collections.Generic;class Program{static void Main(){// 创建一个字典&#xff0c;键是字符串类型&#xff0c;值是整数类型Dictionary<string, int> studentScores new Dictionary<string, int>();// 向字典中添加键值对// 原理&am…

如何从头开始构建神经网络?(附教程)

随着流行的深度学习框架的出现&#xff0c;如 TensorFlow、Keras、PyTorch 以及其他类似库&#xff0c;学习神经网络对于新手来说变得更加便捷。虽然这些框架可以让你在几分钟内解决最复杂的计算任务&#xff0c;但它们并不要求你理解背后所有需求的核心概念和直觉。如果你知道…

Conda安装与使用中的若干问题记录

Conda安装与使用中的若干问题记录 1.Anaconda 安装失败1.1.问题复述1.2.问题解决&#xff08;安装建议&#xff09; 2.虚拟环境pip install未安装至本虚拟环境2.1.问题复述2.2.问题解决 3.待补充 最近由于工作上的原因&#xff0c;要使用到Conda进行虚拟环境的管理&#xff0c;…

『OpenCV-Python』视频的读取和保存

点赞 + 关注 + 收藏 = 学会了 推荐关注 《OpenCV-Python专栏》 上一讲介绍了 OpenCV 的读取图片的方法,这一讲简单聊聊 OpenCV 读取和保存视频。 视频的来源主要有2种,一种是本地视频文件,另一种是实时视频流,比如手机和电脑的摄像头。 要读取这两种视频的方法都是一样的…

python关键字和内置函数有哪些?

Python关键字 Python 是一种高级编程语言&#xff0c;具有许多关键字。关键字是语言的保留字&#xff0c;它们在语法上具有特殊的含义&#xff0c;不能用作变量名、函数名或其他标识符。以下是 Python 的一些主要关键字&#xff1a; False - 布尔值假None - 空值或无值True -…

docker构建多平台容器

1.创建builder配置文件 buildkitd.toml debug true [registry."docker.io"] #mirrors ["hub.dvcloud.xin"] http true insecure true2.定义需要构建的平台 platform"linux/amd64,linux/arm64" 3.创建builder if ! docker buildx ls |g…

SQL 中 BETWEEN AND 用于字符串的理解

SQL 中 BETWEEN AND 用于字符串的理解 在 SQL 中&#xff0c;BETWEEN AND 关键字可以用在数值和日期类型上&#xff0c;非常好理解。同时也可以用于字符串类型&#xff0c;它用于选择在两个指定值之间的数据&#xff0c;包括边界值。本文主要总结一下BETWEEN AND用于string类型…

字节青训-字符串字符类型排序问题、小C点菜问题

目录 一、字符串字符类型排序问题 题目 样例 输入&#xff1a; 输出&#xff1a; 输入&#xff1a; 输出&#xff1a; 输入&#xff1a; 输出&#xff1a; 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; ​…

ES数据迁移方式

elasticdump 需要安装elasticdump &#xff0c;node插件 #!/bin/bashindexes("index1" "index2")for index in "${indexes[]}" doecho "backup ${index} start"#--type: 迁移类型&#xff0c;默认为 data&#xff0c;表明只迁移数据…

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…

任务调度工具Spring Test

Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 作用&#xff1a;定时自动执行某段Java代码 应用场景&#xff1a; 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 一.…

微信小程序实战篇-分类页面制作

一、项目背景与目标 在微信小程序开发中&#xff0c;分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息&#xff0c;提升用户体验和操作效率。今天&#xff0c;我们将深入探讨如何制作一个实用的微信小程序分类页面&#xff0c;先来看一下…

.NET 9 中 IFormFile 的详细使用讲解

在.NET应用程序中&#xff0c;处理文件上传是一个常见的需求。.NET 9 提供了 IFormFile 接口&#xff0c;它可以帮助我们轻松地处理来自客户端的文件上传。以下是 IFormFile 的详细使用讲解。 IFormFile 接口简介 IFormFile 是一个表示上传文件的接口&#xff0c;它提供了以下…

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言&#xff1a;对于嵌入式硬件这个庞大的知识体系而言&#xff0c;太多离散的知识点很容易疏漏&#xff0c;因此对于这些容易忘记甚至不明白的知识点做成一个梳理&#xff0c;供大家参考以及学习&#xff0c;本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…

数据结构(单向链表——c语言实现)

链式存储的优缺点&#xff1a; 优点&#xff1a; 1、动态分配内存&#xff1a; 链式存储不需要在数据插入之前分配固定大小的数组或内存块&#xff0c;因此它更适合存储动态变化的数据 2、高效的插入和删除操作&#xff1a; 在链表中插入或删除元素只需要调整相邻节点的指…