微服务Day6

文章目录

  • DSL查询文档
  • RestClient查询文档
    • 快速入门
  • 旅游案例

DSL查询文档

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RestClient查询文档

快速入门

在这里插入图片描述

    @Testvoid testMatchAll() throws IOException {//1.准备RequestSearchRequest request = new SearchRequest("hotel");//2.准备DSLrequest.source().query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);System.out.println(search);}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    @Testvoid testBool() throws IOException {//1.准备RequestSearchRequest request = new SearchRequest("hotel");//2.准备DSL//2.1准备BooleanQueryBoolQueryBuilder boolQuery = QueryBuilders.boolQuery();//2.2添加term
//        boolQuery.must(QueryBuilders.termQuery("city", "杭州"));//2.3添加rangeboolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));request.source().query(boolQuery);//3.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);//4.解析响应handleResponse(search);}

在这里插入图片描述

旅游案例

在这里插入图片描述
在这里插入图片描述
Controller层

@RestController
@RequestMapping("/hotel")
public class HotelController {@Autowiredprivate IHotelService hotelService;@PostMapping("/list")public PageResult search(@RequestBody RequestParams params){return hotelService.search(params);}
}

Service实现类

@Service
public class HotelService extends ServiceImpl<HotelMapper, Hotel> implements IHotelService {@Autowiredprivate RestHighLevelClient client;@Overridepublic PageResult search(RequestParams params) {try {//1.准备RequestSearchRequest request = new SearchRequest("hotel");//2.准备DSL//2.1queryString key = params.getKey();if (key == null||"".equals(key)){request.source().query(QueryBuilders.matchAllQuery());}else{request.source().query(QueryBuilders.matchQuery("all",key));}//2.2分页int page = params.getPage();int size = params.getSize();request.source().from(page-1).size(size);//3.发送请求,得到响应SearchResponse response = client.search(request, RequestOptions.DEFAULT);//4.解析响应return handleResponse(response);} catch (IOException e) {throw new RuntimeException(e);}}private PageResult handleResponse(SearchResponse response) {//解析响应SearchHits searchHits = response.getHits();//获取总条数long total = searchHits.getTotalHits().value;System.out.println("共有:"+total);//文档数组SearchHit[] hits = searchHits.getHits();//遍历List<HotelDoc> hote  ls = new ArrayList<>();for (SearchHit hit : hits) {//获取文档sourceString json = hit.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);//获取高亮结果Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (!CollectionUtils.isEmpty(highlightFields)){//根据字段名称获取高亮结果HighlightField highlightField = highlightFields.get("name");if (highlightField != null){//获取高亮值String name = highlightField.getFragments()[0].string();//覆盖非高亮结果hotelDoc.setName(name);}}hotels.add(hotelDoc);}return new PageResult(total,hotels);}
}

在这里插入图片描述

在这里插入图片描述
修改Service实现类

@Service
public class HotelService extends ServiceImpl<HotelMapper, Hotel> implements IHotelService {@Autowiredprivate RestHighLevelClient client;@Overridepublic PageResult search(RequestParams params) {try {//1.准备RequestSearchRequest request = new SearchRequest("hotel");//2.准备DSL//2.1query//构建BooleanQueryBoolQueryBuilder boolQuery = buildBasicQuery(params, request);request.source().query(boolQuery);//2.2分页int page = params.getPage();int size = params.getSize();request.source().from(page-1).size(size);//3.发送请求,得到响应SearchResponse response = client.search(request, RequestOptions.DEFAULT);//4.解析响应return handleResponse(response);} catch (IOException e) {throw new RuntimeException(e);}}private BoolQueryBuilder buildBasicQuery(RequestParams params, SearchRequest request) {BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();//全文检索  must关键字搜索String key = params.getKey();if (key == null||"".equals(key)){boolQuery.must(QueryBuilders.matchAllQuery());}else{boolQuery.must(QueryBuilders.matchQuery("all",key));}// 城市条件if (params.getCity() != null && !params.getCity().equals("")){boolQuery.filter(QueryBuilders.termQuery("city", params.getCity()));}request.source().query(boolQuery);// 品牌条件if (params.getBrand() != null && !params.getBrand().equals("")){boolQuery.filter(QueryBuilders.termQuery("brand", params.getBrand()));}// 星级条件if (params.getStarName() != null && !params.getStarName().equals("")){boolQuery.filter(QueryBuilders.termQuery("starName", params.getStarName()));}//价格if (params.getMinPrice() != null && !params.getMinPrice().equals("")){boolQuery.filter(QueryBuilders.rangeQuery("price").gte(params.getMinPrice()).lte(params.getMaxPrice()));}return boolQuery;}private PageResult handleResponse(SearchResponse response) {//解析响应SearchHits searchHits = response.getHits();//获取总条数long total = searchHits.getTotalHits().value;System.out.println("共有:"+total);//文档数组SearchHit[] hits = searchHits.getHits();//遍历List<HotelDoc> hotels = new ArrayList<>();for (SearchHit hit : hits) {//获取文档sourceString json = hit.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);//获取高亮结果Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (!CollectionUtils.isEmpty(highlightFields)){//根据字段名称获取高亮结果HighlightField highlightField = highlightFields.get("name");if (highlightField != null){//获取高亮值String name = highlightField.getFragments()[0].string();//覆盖非高亮结果hotelDoc.setName(name);}}hotels.add(hotelDoc);}return new PageResult(total,hotels);}
}

在这里插入图片描述

在这里插入图片描述
修改Service中代码

        //2.3排序String location = params.getLocation();if (location != null && !location.equals("")){request.source().sort(SortBuilders.geoDistanceSort("location", new GeoPoint(location)).order(SortOrder.ASC).unit(DistanceUnit.KILOMETERS));}

在解析响应中添加

            //获取排序值Object[] sortValues = hit.getSortValues();if (sortValues.length>0){Object sortValue = sortValues[0];hotelDoc.setDistance(sortValue);}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在BooleanSearch中添代码

        //2.算分控制FunctionScoreQueryBuilder functionScoreQuery = QueryBuilders.functionScoreQuery(boolQuery,// function score的数组new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{//其中一个function score元素new FunctionScoreQueryBuilder.FilterFunctionBuilder(// 过滤条件QueryBuilders.termQuery("isAD", true),//算分函数ScoreFunctionBuilders.weightFactorFunction(10))});request.source().query(functionScoreQuery);

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

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

相关文章

海外媒体推广通过5个发稿平台开拓国际市场-华媒舍

随着全球化的进程&#xff0c;国际市场对于企业的吸引力日益增加。进入国际市场并获得成功并非易事。海外媒体推广发稿平台成为了一种重要的营销手段&#xff0c;能够帮助企业在国际市场中建立品牌形象、传递信息和吸引目标受众。本文介绍了五个海外媒体推广发稿平台&#xff0…

Linux系统安装部署RabbitMQ详细教程(图文详解)

前言:在分布式系统中进行消息传递和通信时,可能会用到RabbitMQ,这边我写一篇简易的部署教程,带大家了解一下,只要跟着文章一步步走就可以部署成功了,其中的坑博主都替大家踩过了。 博主的其他部署教程: 1、Docker部署前后端分离项目:手把手通过Docker部署前后端分离项目…

Linux:gcc的基本知识

gcc 是一个将C语言文件变成可执行文件的工具。 在Linux中&#xff0c;如果需要将一个C语言文件变得可以执行&#xff0c;那么除了这个文件本身的内容是C语言编写的内容外&#xff0c;还需要gcc这个编译工具进行编译才行。 gcc 使用的格式方法:gcc 要编译的文件 //在该代码下…

【软件架构】05-高性能架构

1、缓存 设计思路&#xff1a; 1.什么数据应该缓存 2.什么时机触发缓存和以及触发方式是什么 3.缓存的层次和粒度&#xff08; 网关缓存如 nginx&#xff0c;本地缓存如单机文件&#xff0c;分布式缓存如redis cluster&#xff0c;进程内缓存如全局变量&#xff09; 1&#…

Flink checkpoint操作流程详解与报错调试方法汇总,增量checkpoint原理及版本更新变化,作业恢复和扩缩容原理与优化

Flink checkpoint操作流程详解与报错调试方法汇总&#xff0c;增量checkpoint原理及版本更新变化&#xff0c;作业恢复和扩缩容原理与优化 flink checkpint出错类型flink 重启策略Checkpint 流程简介增量Checkpoint实现原理MemoryStateBackend 原理FsStateBackend原理RocksDBSt…

Javascript 运算符、流程控制语句和数组

【三】运算符 【1】算数运算符 &#xff08;1&#xff09;分类 加减乘除&#xff1a;*/取余&#xff1a;%和python不一样的点&#xff1a;没有取整// &#xff08;2&#xff09;特殊的点 只要NaN参与运算得到的结果也是NaNnull转换成0&#xff0c;undefined转换成NaN 【2…

oauth2基本概念

1.什么是oauth2 OAuth2.0介绍 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方 应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他 们数据的所有内容。OAuth在全世界得到广泛应…

信息系统项目管理师(高项)—学习笔记

第一章信息化发展 1.1 信息与信息化 1.1.1 信息 信息是物质、能量及其属性的标示的集合&#xff0c;是确定性的增加。 它以物质介质为载体&#xff0c;在传递和反映世界各种事物存在方式、运动状态等的表征。 信息不是物质&#xff0c;也不是能力&#xff0c;它以一种普遍…

c++ qt五子棋联网对战游戏

C qt 五子棋联网对战游戏运行环境 Qt 6.6.0 (MSVC 2019 64-bit) 代码文件编码格式 ANSI txt文件编码格式 ANSI 测试用例 服务端端口被占用 通过客户端端口被占用 通过客户端连接服务端 服务端中途断开 通过客户端连接服务端 客户端中途断开 通过服务端没有启动 客户端启动…

编译遇到 AT_CHECK 未定义

mmdet/ops/nms/src/nms_cuda.cpp:4:23: error: ‘AT_CHECK’ was not declared in this scope; did you mean ‘DCHECK’?4 | #define CHECK_CUDA(x) AT_CHECK(x.type().is_cuda(), #x, " must be a CUDAtensor ")| ^~~~~~~~我在编译旧版本 m…

svn客户端下载、安装、使用

下载、使用 打开360软件管家&#xff0c;选怎宝库&#xff0c;搜索svn&#xff0c;点击安装 可以修改安装路径 使用 在桌面右键弹出菜单&#xff0c;点击 输入地址&#xff0c;点击ok 输入用户名、密码 &#xff0c;等待检出完成

代码随想录算法训练营day38 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

动态规划&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c;贪心没有状态推导&#xff0c;而是从局部直接选最优的。 动态规划问题五步曲 确定dp数…

【Linux】C语言实现超级简单进度条!你不会还不知道吧?

目录 1. 基础准备&#x1f38d; 1.1 \r&&\n 1.2 缓冲区 2. 进度条1.0&#x1f940; 2.1 Process.h 2.2 Process.c 2.3 Main.c 2.4 Makefile 3.进度条 2.0&#x1faba; 3.1 Process.h 3.2 Process.c 3.3 Main.c 1. 基础准备&#x1f38d; 1.1 \r&&…

关于信号强度单位dB和dBm区别

dB&#xff0c;dBm 都是功率增益的单位&#xff0c;不同之处如下&#xff1a; 一、dB 是一个相对值&#xff0c;表示两个量的相对大小关系&#xff0c;没有单位。当考虑甲的功率相比于乙功率大或小多少个dB时&#xff0c;按下面的计算公式&#xff1a;10log&#xff08;甲功率/…

WPF真入门教程29--MVVM常用框架之MvvmLight

1、MVVM模式回顾 关于mvvm模式的基础知识&#xff0c;请看这2个文章&#xff1a; WPF真入门教程23--MVVM简单介绍 WPF真入门教程24--MVVM模式Command命令 做过VUE开发或微信小程序开发的伙伴&#xff0c;就知道MVVM模式&#xff0c;核心就是数据驱动控件&#xff0c;全栈开…

基于SpringBoot的家教管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 家教 个人中心 管理员界面 摘要 本文介绍了基于SpringBoot框架开发的家…

如何正确设置CrossOver之偏好设置 crossover软件使用 crossover设定 crossover软件安装

CrossOver的核心是Wine&#xff0c;Wine是一个能在多种POSIX-compliant操作系统&#xff08;如&#xff1a;Linux、Mac OS等&#xff09;上运行Windows应用的兼容层。Wine不是Windows的模拟工具&#xff0c;它是把Windows API 调用翻译成为动态的 POSIX 调用&#xff0c;实现Li…

Docker部署Mysql8.0.2

1、 搜索Mysql docker search mysql 2、 精准搜索Mysql8.0.2 docker search mysql:8.0.2 3、 拉取镜像 docker pull mysql:8.0.2 4、 启动镜像 docker run --name mysql -id -p 3306:3306 -v /temp/mysql/log:/logs -v /temp/mysql/data:/var/lib/mysql -e MYSQL_ROOT…

03 基本指令 1

linux的命令选项都可以同时叠加多个 ls 语法&#xff1a;ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;命令列出该目录下所有子目录与文件。对于文件&#xff0c;列出文件名以及其他信息 常用选项&#xff1a; -a 列出目录下所有文件&#xff0c;包括.开头的…