分布式搜索引擎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…

[JVM] 浅谈JMM(Java 内存模型)

Java 内存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;是 Java 虚拟机规范中定义的一种抽象计算机内存模型&#xff0c;用于描述 Java 程序在多线程下的内存访问行为。JMM 定义了线程之间共享变量的可见性和有序性规则&#xff0c;为开发者提供了一种可靠的同…

书生.浦语大模型实战一

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

ADT知识

c和指针 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 ADT&#xff0c;全程Abstract data type&#xff0c;即抽象数据类型。 c和指针的ADT主要包括链表、堆栈、队列和树。 c和指针的第十二章讲述的是链表。第十三章讲述的是堆栈、队…

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核互连。可…

【cuda】二、基础知识: 内存管理 同步

在CUDA中&#xff0c;使用**cudaMalloc()来分配设备内存&#xff0c;使用cudaFree()**来释放设备内存。 cudaMallocManaged 统一内存管理 **统一虚拟寻址&#xff08;Unified Memory&#xff09;&#xff1a;使用cudaMallocManaged()**来分配可以在CPU和GPU之间共享的内存。无…

facebook广告怎么设置受众人群

在设置Facebook广告受众人群时&#xff0c;你可以遵循以下步骤&#xff1a; 打开广告创建工具&#xff0c;点击页面右上角的箭头并选择“创建广告”。选择广告目标&#xff0c;根据想要实现的目标创建广告。例如&#xff0c;想要让更多用户谈论你的主页和帖子&#xff0c;或者…

改进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

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

Pandas实战100例 | 案例 1: 读取不同类型的数据文件

案例 1: 读取不同类型的数据文件 知识点讲解 Pandas 支持多种数据文件格式的读取&#xff0c;包括 CSV、Excel (XLS/XLSX) 和文本文件 (TXT)。了解如何从这些不同的数据源中读取数据是数据分析的基础。 示例代码 读取 CSV 文件 # 读取 CSV 文件 df_csv pd.read_csv(examp…

Vsearch安装

wget https://github.com/torognes/vsearch/releases/download/v2.26.1/vsearch-2.26.1-linux-x86_64.tar.gz tar xzf vsearch-2.26.1-linux-x86_64.tar.gz (完整路径)/bin/vsearch 去冗余 ${software_path}/Vsearch/vsearch-2.26.1-linux-x86_64/bin/vsearch --derep_prefix…

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;能够提供个性化的健康…