分布式搜索引擎ElasticSearch——搜索功能

分布式搜索引擎ElasticSearch——搜索功能

文章目录

  • 分布式搜索引擎ElasticSearch——搜索功能
    • DSL查询文档
      • DSL查询分类
      • 全文检索查询
      • 精确查询
      • 地理查询
      • 复合查询
        • Function Score Query
        • Boolean Query
    • 搜索结果处理
      • 排序![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/37de45bd79be4316a9c23040f754758e.png)
      • 分页
      • 高亮
    • RestClient查询文档
      • 快速入门
      • match,term,range,bool查询
      • 排序和分页
      • 高亮显示
    • 黑马旅游案例
      • 基本的搜索和分页
      • 条件过滤
      • 找周边的酒店
      • 广告置顶

在这里插入图片描述

DSL查询文档

在这里插入图片描述

DSL查询分类

在这里插入图片描述
DSL官方文档
在这里插入图片描述
在这里插入图片描述

全文检索查询

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

精确查询

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

地理查询

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

复合查询

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

Function Score Query

在这里插入图片描述
function score query
在这里插入图片描述
在这里插入图片描述

Boolean Query

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

搜索结果处理

在这里插入图片描述

排序在这里插入图片描述

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

分页

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
官方文档
在这里插入图片描述

高亮

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

RestClient查询文档

在这里插入图片描述

快速入门

在这里插入图片描述

在这里插入图片描述


public class HotelSearchTest {private RestHighLevelClient client;@Testvoid testMatchAll() throws IOException {// 1. 准备RequestSearchRequest request = new SearchRequest("hotel");// 2. 准备DSLrequest.source().query(QueryBuilders.matchAllQuery());// 3. 发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4. 解析响应SearchHits searchHits = response.getHits();// 4.1 获取总条数long total = searchHits.getTotalHits().value;System.out.println("共搜索到" + total + "条数据");// 4.2 文档数组SearchHit[] hits = searchHits.getHits();// 4.3 遍历for (SearchHit hit : hits) {// 获取文档sourceString json = hit.getSourceAsString();// 反序列化HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);System.out.println("hotelDoc = " + hotelDoc);}System.out.println(response);}@BeforeEachvoid setUp(){this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.10.88:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

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

match,term,range,bool查询

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

  // 全文检索查询@Testvoid testMatch() throws IOException {// 1. 准备RequestSearchRequest request = new SearchRequest("hotel");// 2. 准备DSLrequest.source().query(QueryBuilders.matchQuery("all","皇冠"));// 3. 发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);handleResponse(response);System.out.println(response);}// bool查询@Testvoid testBool() throws IOException {// 1. 准备RequestSearchRequest request = new SearchRequest("hotel");// 2. 准备DSL// 2.1 准备BooleanQueryBoolQueryBuilder boolQuery = QueryBuilders.boolQuery();// 2.2 添加termboolQuery.must(QueryBuilders.termQuery("city","杭州"));// 2.3 添加rangeboolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));request.source().query(boolQuery);// 3. 发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);handleResponse(response);System.out.println(response);}// 抽取解析的代码private static void handleResponse(SearchResponse response) {// 4. 解析响应SearchHits searchHits = response.getHits();// 4.1 获取总条数long total = searchHits.getTotalHits().value;System.out.println("共搜索到" + total + "条数据");// 4.2 文档数组SearchHit[] hits = searchHits.getHits();// 4.3 遍历for (SearchHit hit : hits) {// 获取文档sourceString json = hit.getSourceAsString();// 反序列化HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);System.out.println("hotelDoc = " + hotelDoc);}}

在这里插入图片描述

排序和分页

在这里插入图片描述

// 排序和分页@Testvoid testPageAndSort() throws IOException {// 页码。每页大小int page  = 2, size  = 5;// 1. 准备RequestSearchRequest request = new SearchRequest("hotel");// 2. 准备DSL// 2.1 queryrequest.source().query(QueryBuilders.matchAllQuery());// 2.2 配许sortrequest.source().sort("price", SortOrder.ASC);// 2.3 分页from, sizerequest.source().from((page-1)*size).size(5);// 3. 发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4. 解析响应handleResponse(response);}

高亮显示

在这里插入图片描述

 // 高亮@Testvoid testHighlight() throws IOException {// 1. 准备RequestSearchRequest request = new SearchRequest("hotel");// 2. 准备DSL// 2.1 queryrequest.source().query(QueryBuilders.matchQuery("all","如家"));// 2.2 高亮request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));// 3. 发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4. 解析响应handleResponse(response);}

在这里插入图片描述
就是在前面抽取的解析代码中进一步添加关于高亮的解析部分,因为highlight和source是同级目录的,所以采用的方法类似。

  // 抽取解析的代码private static void handleResponse(SearchResponse response) {// 4. 解析响应SearchHits searchHits = response.getHits();// 4.1 获取总条数long total = searchHits.getTotalHits().value;System.out.println("共搜索到" + total + "条数据");// 4.2 文档数组SearchHit[] hits = searchHits.getHits();// 4.3 遍历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);}}System.out.println("hotelDoc = " + hotelDoc);}}

在这里插入图片描述

黑马旅游案例

在这里插入图片描述

基本的搜索和分页

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

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

在这里插入图片描述

@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.1 queryString 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(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) {// 4. 解析响应SearchHits searchHits = response.getHits();// 4.1 获取总条数long total = searchHits.getTotalHits().value;// 4.2 文档数组SearchHit[] hits = searchHits.getHits();// 4.3 遍历List<HotelDoc> hotels = new ArrayList<>();for (SearchHit hit : hits) {// 获取文档sourceString json = hit.getSourceAsString();// 反序列化HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);hotels.add(hotelDoc);}// 4.4 封装返回return new PageResult(total,hotels);}}

条件过滤

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

在这里插入图片描述

@Overridepublic PageResult search(RequestParams params) {try {// 1. 准备RequestSearchRequest request = new SearchRequest("hotel");// 2. 准备DSL// 2.1 query// 构建BooleanQuerybuildBasicQuery(params, request);// 2.2 分页int page = params.getPage();int size = params.getSize();request.source().from((page - 1) * size).size(size);// 3. 发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4. 解析响应return handleResponse(response);}catch (IOException e){throw new RuntimeException(e);}}private static void buildBasicQuery(RequestParams params, SearchRequest request) {BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();// 关键字搜索String key = params.getKey();if (key == null || "".equals(key)) {boolQuery.must(QueryBuilders.matchAllQuery());} else {boolQuery.must(QueryBuilders.matchQuery("all", key));}// 条件过滤// 城市if(params.getCity() !=  null && !"".equals(params.getCity())){boolQuery.filter(QueryBuilders.termQuery("city", params.getCity()));}// 品牌if(params.getBrand() !=  null && !"".equals(params.getBrand())){boolQuery.filter(QueryBuilders.termQuery("brand", params.getBrand()));}// 星级if(params.getStarName() !=  null && !"".equals(params.getStarName())){boolQuery.filter(QueryBuilders.termQuery("starName", params.getStarName()));}// 价格——范围过滤if(params.getMinPrice() != null && params.getMaxPrice() != null){boolQuery.filter(QueryBuilders.rangeQuery("price").gte(params.getMinPrice()).lte(params.getMaxPrice()));}request.source().query(boolQuery);}

找周边的酒店

在这里插入图片描述

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

广告置顶

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

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

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

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

相关文章

Qt 使用vs2019制作Qt静态库( *.lib )并使用

一 .创建静态库 1.创建Qt Class Library(Qt静态类库)项目 2.设置项目名以及项目路径(注意:不能有中文字符) 点击next 3.选则需要的模式以及Qt 模块 然后点击next,Finish完成创建 4. 然后手动添加Qt Widget Form File (.ui)并对设计ui 5. tpendialog.h #pragma once #includ…

书生.浦语大模型实战一

从专用模型到通用大模型 数据 书生.万卷1.0 文本图像-文本视频数据 OpenDataLab开放平台 图像&#xff1a;ImageNettokens语料&#xff1a;WikiQA音频视频&#xff1a;MovieNet3D模型 预训练 微调 增量续训 使用场景&#xff1a;让基座模型学习到一些新知识&#xff0…

Ubuntu 20.04 Intel RealSense D435i 相机标定教程

下载编译code_utils mkdir -p ~/imu_catkin_ws/src cd ~/imu_catkin_ws/src catkin_init_workspace source ~/imu_catkin_ws/devel/setup.bash git clone https://github.com/gaowenliang/code_utils.git cd .. catkin_make报错&#xff1a;sumpixel_test.cpp:2:10: fatal err…

vivado 使用IP Integrator源

使用IP Integrator源 在Vivado Design Suite中&#xff0c;您可以在RTL中添加和管理IP子系统块设计&#xff08;.bd&#xff09;项目或设计。使用Vivado IP集成程序&#xff0c;您可以创建IP子系统块设计。IP集成程序使您能够通过实例化和将Vivado IP目录中的多个IP核互连。可…

改进YOLOv8:添加CBAM注意力机制(涨点明显)

1、计算机视觉中的注意力机制 计算机视觉中的注意力机制是一种聚焦于局部信息的机制&#xff0c;其基本思想是让系统学会忽略无关信息而关注重点信息。这种机制在图像识别、物体检测和人脸识别等任务中都发挥了重要作用。 注意力机制的实现方法有多种&#xff0c;其中包括空间…

亲手打造一个本地LLM语音助手来管理智能家居

经历过 Siri 和 Google 助手之后&#xff0c;我发现尽管它们能够控制各种设备&#xff0c;但却无法进行个性化定制&#xff0c;并且不可避免地依赖于云服务。出于对新知识的渴望以及想在生活中使用一些酷炫的东西&#xff0c;我下定决心&#xff0c;要追求更高的目标。我的要求…

【RTOS】快速体验FreeRTOS所有常用API(2)任务管理

目录 二、任务管理2.1 任务创建&#xff08;三种方式&#xff09;1&#xff09;动态内存分配方式创建任务2&#xff09;静态内存分配方式创建任务3&#xff09;带有任务参数方式创建任务 2.2 任务删除2.3 两种delay 二、任务管理 该部分在上份代码基础上修改得来&#xff0c;代…

​HDD回暖于2024,与SSD决战于2028--part2

东芝和西部数据在2023年的硬盘产品中都没有采用类似希捷的HAMR技术产品&#xff0c;而是采用了其他的技术方案用于提升存储容量。 东芝采用了MAMR技术&#xff0c;通过微波磁通控制现象来提高高密度区域的写入信号质量。根据厂商的测试数据发现&#xff0c;MAMR的磁头可靠性比H…

Flink-容错机制

Flink中的容错机制 流式数据连续不断地到来&#xff0c;无休无止&#xff1b;所以流处理程序也是持续运行的&#xff0c;并没有一个明确的结束退出时间。机器运行程序&#xff0c;996 起来当然比人要容易得多&#xff0c;不过希望“永远运行”也是不切实际的。因为各种硬件软件…

HCIP ISIS实验

拓扑图&IP划分如下图&#xff1a; 第一步&#xff0c;配置IP地址&环回地址 以R1为例&#xff0c;R2~R8同理 interface GigabitEthernet 0/0/0 ip address 18.1.1.1 24 interface GigabitEthernet 0/0/1 ip address 12.1.1.1 24 interface LoopBack 0 ip address 1.1.…

第07章_面向对象编程(进阶)拓展练习(关键字:this,继承性和方法重写,关键字:super,多态性,Object类)

文章目录 第07章_面向对象编程&#xff08;进阶&#xff09;拓展练习01-关键字&#xff1a;this1、Circle类2、MyDate类3、Card类 02-继承性和方法重写4、Person、Student、Teacher类5、DepositCard、CreditCard类6、Employee、Programmer、Designer、Architect类7、判断输出结…

统计学-R语言-4.6

文章目录 前言列联表条形图及其变种---单式条形图条形图及其变种---帕累托图条形图及其变种---复式条形图条形图及其变种---脊形图条形图及其变种---马赛克图饼图及其变种---饼图饼图及其变种---扇形图直方图茎叶图箱线图小提琴图气泡图总结 前言 本篇文章是对数据可视化的补充…

Centos7.9忘记Root密码找回

Centos7.9忘记Root密码找回 1. 背景2. 目的3. 具体操作3.1 重启系统3.2 增加代码3.3 单用户模式3.4 单用户模式3.5 修改密码3.6 创建文件3.7 重启验证 1. 背景 由于物理主机上安装了多个虚拟机&#xff0c;部分虚拟机忘记了root密码&#xff0c;前段时间刚好要用这个虚拟机&…

智慧康养项目:智能技术与产品提升老年人生活品质

智慧康养项目需要集成的一些独特的技术和产品&#xff0c;其中包括&#xff1a; 智能健康监测设备&#xff1a;我们开发了一款能够实时监测老年人身体状况的智能健康监测设备&#xff0c;包括血压、血糖、心率等指标。该设备通过数据分析处理&#xff0c;能够提供个性化的健康…

内存泄漏问题

内存泄漏是一种常见的问题&#xff0c;它可能导致系统内存不断增加&#xff0c;最终耗尽可用内存。解决内存泄漏问题通常需要进行调试和分析。下面是一些可能有助于解决内存泄漏问题的步骤&#xff1a; 1. 监控内存使用情况&#xff1a; a. 使用 malloc 记录日志&#xff1a;…

【Dart】=> [05] Dart初体验-函数

文章目录 函数函数特点可选和默认参数函数对象箭头函数匿名函数综合案例 能够定义并使用Dart函数 学习内容&#xff1a; 函数定义可选和默认参数函数对象箭头函数匿名函数 函数 函数定义 Dart函数的结构&#xff1a; 调用函数&#xff1a; 案例&#xff1a;定义计算任意…

短视频账号矩阵剪辑分发系统无人直播技术开发源头

一、全行业独家源头最全面的核心技术 短视频矩阵新玩法是指利用批量自动混剪系统来处理大量短视频&#xff0c;通过智能算法自动进行视频剪辑、场景切换、特效添加等操作&#xff0c;最终生成高质量、精彩纷呈的混剪视频作品的方法和技术。这一方法的出现使得大规模短视频制作…

牛客周赛 Round 3 解题报告 | 珂学家 | 贪心思维场

前言 寒之不寒无水也&#xff0c;热之不热无火也。 整体评价 感觉比较简单&#xff0c;更加侧重于思维吧。和前几场的Round系列&#xff0c;风格不太一样。 A. 游游的7的倍数 因为连续7个数&#xff0c;比如有一个数是7的倍数 因此从个位数中着手添加&#xff0c;是最好的选…

java自定义排序Comparator

&#x1f4d1;前言 本文主要是【java】——java自定义排序Comparator的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每…

2024年AMC8历年真题练一练和答案详解(8),以及全真模拟题

今天是1月15日&#xff0c;距离本周五的AMC8正式比赛还有四天时间&#xff0c;已经放寒假了的孩子可以多点时间复习备考&#xff0c;还在准备期末考试的孩子可以先以期末考试为重&#xff0c;忙里偷闲刷一下AMC8的题目保持感觉——系统的知识学习可能时间不够了&#xff0c;可以…