ElasticSearch - 旅游酒店案例es功能实现

news2024/9/9 4:26:54

目录

案例

搜索与分页功能

条件过滤功能

附近的酒店功能

广告置顶功能

HotelService(es操作)总览


  • 案例

  • 搜索与分页功能

  • 案例需求:
  • 实现旅游的酒店搜索功能,完成关键字搜索和分页
  • 实现步骤如下:
  • 1.定义实体类,接收前端请求
  • 实体类有两个:
    • (1)一个是前端的请求参数实体

    • key:搜索关键字
    • page:页码
    • size:每页大小
    • sortBy:排序,目前暂不实现
    • (2)一个是服务端应该返回的响应结果实体

    • 分页查询,需要返回分页结果PageResult,包含两个属性:
      • total:总条数
      • List<HotelDoc>:当前页的数据
  • 2.定义controller接口,接收页面请求,调用IHotelService的search方法

  • 定义一个HotelController,声明查询接口,满足下列要求:
    • 请求方式:Post
    • 请求路径:/hotel/list
    • 请求参数:对象,类型为RequestParam
    • 返回值:PageResult,包含两个属性
      • Long total:总条数
      • List<HotelDoc> hotels:酒店数据
  • 3.定义IHotelService中的search方法,利用match查询实现根据关键字搜索酒店信息
  • 实现搜索业务
  • (1)实现搜索业务,肯定离不开RestHighLevelClient,所以需要把它注册到Spring中作为一个Bean

  • (2)在controller调用了IHotelService,并没有实现该方法,因此下面就在IHotelService中定义方法,并且去实现业务逻辑

  • 条件过滤功能

  • 案例需求:
  • 添加品牌、城市、星级、价格等过滤功能
  • 实现步骤如下:
  • 1.修改前端请求参数实体类(前面代码提供的便是已经完善好的)
  • 包含的过滤条件有:
    • brand:品牌值
    • city:城市
    • minPrice~maxPrice:价格范围
    • starName:星级
  • 2.修改搜索业务
  • 在HotelService的search方法中,只有一个地方需要修改:requet.source().query(…)其中的查询条件
  • 在之前的业务中,只有match查询,根据关键字搜索
  • 现在要添加条件过滤,包括:
    • 品牌过滤:是keyword类型,用term查询
    • 星级过滤:是keyword类型,用term查询
    • 价格过滤:是数值类型,用range查询
    • 城市过滤:是keyword类型,用term查询
  • 多个查询条件组合,肯定是boolean查询来组合:
    • 关键字搜索放到must中,参与算分
    • 其它过滤条件放到filter中,不参与算分
  • 参数存在才需要过滤,做好非空判断
  • 因为条件构建的逻辑比较复杂,且能复用,这里还会进行一个封装
  • 附近的酒店功能

  • 案例需求:
  • 根据定位获取最近的酒店,按距离排序,显示距离为多少
  • 实现步骤如下:
  • 前端页面点击定位后,会将你所在的位置发送到后台
  • 要根据这个坐标,将酒店结果按照到这个点的距离升序排序
  • 1.修改前端请求参数实体类(前面代码提供的便是已经完善好的)
  • 修改RequestParams参数,接收location字段
  • 2.距离排序API
  • 之前所讲的排序功能,包括两种:
    • 普通字段排序
    • 地理坐标排序
  • 之前只讲了普通字段排序对应的java写法
  • 地理坐标排序只学过DSL语法
  • GET /indexName/_search
  • {
  •   "query": {
  •     "match_all": {}
  •   },
  •   "sort": [
  •     {
  •      "price": "asc"
  •     },
  •    {
  •      "_geo_distance" : {
  •       "FIELD" : "纬度,经度",
  •       "order" : "asc",
  •       "unit" : "km"
  •      }
  •   }
  •  ]
  • }
  • 对应的java代码示例:

  • 3.添加距离排序
  • 4.排序完成后,页面还要获取我附近每个酒店的具体距离值
  • 这个值在响应结果中是独立的
  • 因此,在结果解析阶段,除了解析source部分以外,还要得到sort部分
  • 也就是排序的距离,然后放到响应结果中
  • 要做两件事:
    • 修改HotelDoc,添加排序距离字段,用于页面显示

    • 修改HotelService类中的handleResponse方法,添加对sort值的获取
  • 广告置顶功能

  • 案例需求:
  • 让指定的酒店在搜索结果中排名置顶
  • 实现步骤如下:
  • 给需要置顶的酒店文档添加一个标记
  • 然后利用function score给带有标记的文档增加权重
  • function_score包含3个要素:
    • 过滤条件:哪些文档要加分
    • 算分函数:如何计算function score
    • 加权方式:function score 与 query score如何运算
  • 1.给HotelDoc类添加isAD字段,Boolean类型
    • true:是广告
    • false:不是广告
  • 这样function_score包含3个要素得到确定
    • 过滤条件:判断isAD是否为true
    • 算分函数:可以用最简单暴力的weight,固定加权值
    • 加权方式:可以用默认的相乘,大大提高算分
  • 2.挑选几个喜欢的酒店,给它的文档数据添加isAD字段,值为true

  • 3.修改search方法,添加function score功能,给isAD值为true的酒店增加权重
  • 之前是用的boolean查询,现在要改成function_socre查询
  • function_score查询结构如下:

  • 对应的JavaAPI如下:

  • 可以将之前写的boolean查询作为原始查询条件放到query中,接下来就是添加过滤条件、算分函数、加权模式
  • 所以原来的代码依然可以沿用
  • HotelService(es操作)总览

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

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

相关文章

微信小程序用vant自定义tabbar页面并跳转相应页面

0.前置安装 步骤一 安装 vant 组件库 npm i vant/weapp -S --production下载完后要npm构建才能使用 步骤二 修改 app.json 将 app.json 中的 "style": "v2" 去除&#xff0c;小程序的新版基础组件强行加上了许多样式&#xff0c;难以覆盖&#xff0c;不…

分布式定时任务框架选型

目录 1. 前言 2. 定时任务框架 3. 分布式任务调度系统对比 4. 和quartz框架对比 5. 综合对比 6. 总结和结论 7. 附定时任务的其他方案 1. 前言 我们先思考下面几个业务场景的解决方案: 支付系统每天凌晨1点跑批&#xff0c;进行一天清算&#xff0c;每月1号进行上个月清…

【算法】快速排序算法原理及实现

1.什么是快速排序算法 快速排序是对冒泡排序的一种改良版&#xff0c;通过一趟排序&#xff0c;把要排序的序列分割成两个部分&#xff0c;一部分的所有数据要比另一部分的数据都小&#xff0c;然后再根据这两部分的数据来进行快速排序。以此来达到整一个数据都变成了有序序列…

AI算法创新赛-人车目标检测竞赛总结01

AI0000020摘要:人车目标检测竞赛主要考察目标检测算法与 TPU 部署推理&#xff0c;主要考察算法选型与调 优&#xff0c;面向算能 TPU 迁移部署与推理加速两项能力;主要考核目标是算法效果(mAP)与推 理性能(单张图片推理时间)。针对这些要求&#xff0c;笔者从算法选型&#xf…

【实际开发11】- 统计 / 科学计算 - 1

目录 1. sql 统计返回值为 null 时 , 赋值 为 : 0 ( return UI ) 1. 手动 null 判断 , 进行 “0” 赋值 2. XxxxVO 展示对象 , 初始化时 , 赋值默认值 ( 待优化 ) 2. 统计异常 1. 注意中间表数据的维护 ( 同步删除 / 避免手动删数据 ) 3. 精度损失 1. Java 类型 float、…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:LiveStream和LiveStreamPlayer

本文简述如何在Smobiler中使用LiveStream和LiveStreamPlayer。 LiveStream 直播推送插件 Step 1. 新建一个SmobilerForm窗体&#xff0c;并在窗体中加入LiveStream和Button&#xff0c;布局如下 选中LisvStream&#xff0c;在设计器中设置Url&#xff08;需要事先准备一个视频…

【面试原型链】前端面试那些事(1)之原型链详解

【写在前面】辞旧迎新的春季佳节&#xff0c;在这里博主先祝各位看官新的一年赚钱多多&#xff0c;知识满满&#xff0c;年后谈到面试&#xff0c; 好多人在面试的时候就倒在原型链知识点上面&#xff0c;主要原因还是基本功不够扎实&#xff0c;针对以前的知识我也计划在2023年…

C语言小题,通过指向结构体变量的指针变量输出结构体变量中成员的信息。(指针结构体变量的指针)

前言&#xff1a; 此篇是针对 指针结构体变量的指针 方面的练习。 解题思路&#xff1a; 在已有的基础上&#xff0c;本题要解决两个问题&#xff1a; &#xff08;1&#xff09;怎样对结构体变量成员赋值&#xff1b; &#xff08;2&#xff09;怎样通过指向结构体变量的指针…

天云数据:Hubble数据库系统自主研发率99.62%,是真正的信创数据库

软件是新一代信息技术的灵魂&#xff0c;是数字经济发展的基础&#xff0c;是制造强国、网络强国、数字中国建设的关键支撑。2021年&#xff0c;工信部印发的《“十四五”软件和信息技术服务业发展规划》明确指出&#xff0c;要聚力攻坚基础软件&#xff0c;关键基础软件补短板…

Javascript基础复盘5

内置对象 值属性 这些全局属性返回一个简单值&#xff0c;这些值没有自己的属性和方法。 InfinityNaNundefinedglobalThis函数属性 全局函数可以直接调用&#xff0c;不需要在调用时指定所属对象&#xff0c;执行结束后会将结果直接返回给调用者。 eval()uneval()isFinite()isN…

Q-Learning以及.NET环境下的实现

Q-Learning以及.NET环境下的实现写在前面机器学习Q-Learning环境准备试题准备解题过程写在结尾写在前面 看过我的文章的朋友应该都知道&#xff0c;我之前一直在研究视觉相关的知识&#xff0c;也看了一些卷积神经网络&#xff08;CNN&#xff09;&#xff0c;深度学习相关的文…

强化学习之:价值学习Value-Based Learning

文章目录参考内容动作价值函数&#xff08;Action-value Function&#xff09;深度强化学习&#xff08;DQN&#xff09;学习目标&#xff08;Goal&#xff09;如何获得尽可能好的 Q∗(st,a)→Q^{*}(s_t, a) \rightarrowQ∗(st​,a)→ 用神经网络通过学习获得时间差分算法&…

cocos creater 3.x 开发笔记(踩坑总结)

1、cocos creater 3.x 花屏闪屏黑屏 1.1 花屏 排序是一个很简单的功能&#xff0c;但是最终的呈现却是根据不同平台提供的渲染能力来的。因此&#xff0c;在这里说明一下&#xff0c;如果遇到了 UI 渲染出错&#xff0c;花屏&#xff0c;闪屏等现象&#xff0c;首先要检查的就…

【安装合集】Mysql8.0安装 2023年1月31日 22点15分

1.鼠标右击【Mysql8.0】压缩包选择【解压到Mysql8.0】。 2. 鼠标右击【mysql-installer-community-8.0.17.0】选择【安装】 3. 勾选【I accept the license terms】然后点击【Next】。 4. 选择【Custom】然后点击【Next】。 5. 双击【MySQL Servers】 双击【MySQL Server】&am…

数据指标体系的建设思考(四)

这一篇主要介绍对数据指标体系的价值、数据指标管理平台的理解及数据分析的趋势解读。 一、数据指标体系价值 关于数据指标体系的价值&#xff0c;我想大多数从事数据工作的人员都可以感受得到&#xff0c;毕竟数据指标的输出可以通过可视化的方式&#xff08;如大屏、驾驶舱…

Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法

去除 vi/vim 和 git diff 中的 ^M 问题解决办法问题现象初步分析进一步查看问题解决Source Insightdos2unixNodpadVimsed 命令综上Reference问题现象 git diff 时发现下面的情况&#xff0c;新修改的代码之处都是携带 ^M 字符&#xff0c; 初步分析 肯定是因为 Windows 和 …

推荐5款常用的有限元分析CAE软件

正如我们之前谈到的&#xff0c;计算机辅助软件有助于进行有限元分析。但是我们如何识别好的 CAE 软件呢&#xff1f;CAE 软件必须满足以下要求才能被纳入其类别使用户能够通过图形用户界面 (GUI) 创建模拟允许在模拟中测试组件&#xff0c;同时具有可自定义的环境变量协助优化…

JAVA队列-接口

前言 说到队列,大家都不陌生,很多场景都需要使用到队列,今天我们一起学习JDK提供的队列源码 类图 Queue接口的实现类有很多 从中,我们看到几个熟悉的,BlockingQueue 阻塞队列、Deque 双端队列 Queue 官方介绍: A collection designed for holding elements prior to proce…

MORPHVOX PRO 变声器 软件 Crack

MORPHVOX PRO 变声器 变音的全新层次 在网上聊天和游戏中使你变音 它具有超高语音学习技术&#xff0c;背景取消和高音质特点&#xff0c;将变音带向全新层次。 上好的变音质量 聆听MorphVOX Pro上好的变音质量。 *变音的音频因人而异&#xff0c;但它确实是同一个说话者发出…