当前位置: 首页 > news >正文

微服务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);

相关文章:

  • 5.22 BCC工具之deadlock.py解读
  • 相机选型介绍
  • WordPress后台自定义登录和管理页面插件Admin Customizer
  • 工厂设计模式总结
  • 【GameFramework框架内置模块】2、数据节点(Data Node)
  • 体验LobeChat搭建私人聊天应用
  • 编译遇到 AT_CHECK 未定义
  • 常用的消息中间件RabbitMQ
  • F.softmax以及多维张量的相乘
  • 面试答疑03
  • 【buuctf-我吃三明治】
  • 微服务流量控制组件Sentinel
  • 刷题14 动态规划
  • 睿易售前初级认证课程R1.0睿网络命名选型-2023练习题答案
  • 1、什么是ETF?
  • Cumulo 的 ClojureScript 模块已经成型
  • docker容器内的网络抓包
  • ERLANG 网工修炼笔记 ---- UDP
  • fetch 从初识到应用
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • IOS评论框不贴底(ios12新bug)
  • JavaScript设计模式与开发实践系列之策略模式
  • java概述
  • JS+CSS实现数字滚动
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Octave 入门
  • 前端面试题总结
  • 设计模式走一遍---观察者模式
  • 深度解析利用ES6进行Promise封装总结
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 优化 Vue 项目编译文件大小
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​香农与信息论三大定律
  • (23)Linux的软硬连接
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)Controller接口控制器详解(三)
  • (万字长文)Spring的核心知识尽揽其中
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net程序帮助文档制作
  • .net对接阿里云CSB服务
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [APIO2015]巴厘岛的雕塑
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法