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

SpringBoot-集成Elasticsearch

jsoup:https://jsoup.org/


依赖

<!--解析网页-->
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><version>7.6.2</version>
</dependency>

配置类

@Configuration
public class ElasticsearchClientConfig {@Beanpublic RestHighLevelClient restHighLevelClient(){return new RestHighLevelClient(RestClient.builder(// 是集群可以配置多个new HttpHost("127.0.0.1",9200,"http")));}
}

api 使用

@SpringBootTest
class ApplicationTests {@Autowired// 在容器中的bean的id@Qualifier("restHighLevelClient")private RestHighLevelClient restHighLevelClient;// 创建索引@Testvoid createIndex() throws IOException {// 创建索引请求CreateIndexRequest createIndexRequest = new CreateIndexRequest("springboot_01");// 客户端执行请求,返回响应CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);System.out.println(createIndexResponse);}// 获取索引@Testvoid getIndex() throws IOException {GetIndexRequest getIndexRequest = new GetIndexRequest("springboot_01");// 是否存在boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);System.out.println(exists);GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(getIndexRequest, RequestOptions.DEFAULT);System.out.println(getIndexResponse);}// 删除索引@Testvoid deleteIndex() throws IOException {DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("springboot_01");AcknowledgedResponse acknowledgedResponse = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);// 是否成功删除System.out.println(acknowledgedResponse.isAcknowledged());}@Testvoid testDocument() throws IOException {// 添加文档IndexRequest indexRequest = new IndexRequest("springboot_01");// 文档idindexRequest.id("1");indexRequest.timeout("1s");// JSON格式数据indexRequest.source(JSON.toJSONString(new User("zhangsan",1)), XContentType.JSON);// 发送请求IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);System.out.println(indexResponse.toString());// 更新文档UpdateRequest updateRequest = new UpdateRequest("springboot_01","1");updateRequest.doc(JSON.toJSONString(new User("zhangsan",3)), XContentType.JSON);UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);System.out.println(updateResponse);// 获取文档信息GetRequest getRequest = new GetRequest("springboot_01","1");// 判断文档是否存在boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);System.out.println(exists);GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);System.out.println(getResponse);// 删除文档记录DeleteRequest deleteRequest = new DeleteRequest("springboot_01","1");DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(deleteResponse);}// 文档批量插入@Testvoid addDocumentBatch() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");for (int i = 0; i < 5; i++) {bulkRequest.add(new IndexRequest("springboot_01")// 不设置id默认是随机id.id(""+(i+1)).source(JSON.toJSONString(new User("zhangsan",i+1)), XContentType.JSON));}BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);// 是否失败System.out.println(bulkResponse.hasFailures());}// 文档查询@Testvoid searchDocument() throws IOException {SearchRequest searchRequest = new SearchRequest("springboot_01");// 构建搜索条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 匹配所有//MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();// 精确查询TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");searchSourceBuilder.query(termQueryBuilder);searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));// 搜索条件放入请求searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println(JSON.toJSONString(searchResponse.getHits()));for (SearchHit searchHit : searchResponse.getHits().getHits()) {System.out.println(searchHit.getSourceAsMap());}}
}

应用

@Service
public class IndexService {@Autowiredprivate RestHighLevelClient restHighLevelClient;// 解析数据放入es索引中public Boolean parse(String keyword) throws IOException {// 批量存入BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("60s");// Jsoup解析网页Document document = Jsoup.parse(new URL("https://cn.bing.com/search?q=" + keyword), 30000);// document 就是浏览器的 document 对象Element ol = document.getElementById("b_results");Elements li = ol.getElementsByTag("li");for (Element el : li) {String href = el.getElementsByTag("a").eq(0).attr("href");bulkRequest.add(new IndexRequest("springboot_01").source(JSON.toJSONString(new User(href,0)), XContentType.JSON));}BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);return !bulkResponse.hasFailures();}// 从es索引中查询public List<Map<String,Object>> searchES(String keyword) throws IOException {// 创建搜索请求SearchRequest searchRequest = new SearchRequest("springboot_01");// 构建搜索条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 精确搜索TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", keyword);searchSourceBuilder.query(termQueryBuilder);searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));// 高亮设置HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field("name");highlightBuilder.preTags("<span style='color:green'>");highlightBuilder.postTags("</span>");searchSourceBuilder.highlighter(highlightBuilder);searchRequest.source(searchSourceBuilder);// 执行搜索SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);List<Map<String,Object>> list = new ArrayList<>();// 解析结果for (SearchHit documentFields : searchResponse.getHits().getHits()) {Map<String, HighlightField> highlightFieldMap = documentFields.getHighlightFields();// 获取高亮字段HighlightField highlightField = highlightFieldMap.get("name");// xxx<span style='color:green'>keyword</span>xxxMap<String, Object> sourceAsMap = documentFields.getSourceAsMap();// 原查询结果// 高亮内容替换原内容if (highlightField != null){Text[] fragments = highlightField.fragments();String name = "";for (Text fragment : fragments) {name += fragment;}sourceAsMap.put("name", name);}list.add(sourceAsMap);}return list;}
}

相关文章:

SpringBoot-集成Elasticsearch

jsoup&#xff1a;https://jsoup.org/ 依赖 <!--解析网页--> <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version> </dependency> <dependency><groupId>c…...

数据结构之顺序表及其实现!

目录 ​编辑 1. 顺序表的概念及结构 2. 接口的实现 2.1 顺序表的初始化 2.2 检查顺序表容量是否已满 2.3 顺序表的尾插 ​编辑 2.4 顺序表的尾删 2.5 顺序表的头插 2.6 顺序表的头删 2.7 顺序表在pos位置插入 2.8 顺序表在pos位置删除 2.9 顺序表的查找 2.10 顺…...

Vue组件间通信实践

Vue组件间通信实践 &#x1f31f; 前言 欢迎来到我的小天地&#xff0c;这里是我记录技术点滴、分享学习心得的地方。&#x1f4da; &#x1f6e0;️ 技能清单 编程语言&#xff1a;Java、C、C、Python、Go、前端技术&#xff1a;Jquery、Vue.js、React、uni-app、EchartsUI设…...

FISCO BCOS区块链平台上的智能合约压力测试指南

引言 在当今的分布式系统中&#xff0c;区块链技术因其去中心化、安全性和透明性而备受关注。随着区块链应用的不断扩展&#xff0c;对其性能和稳定性的要求也越来越高。因此&#xff0c;对区块链网络进行压力测试显得尤为重要。 目录 引言 1. 配置FISCO BCOS节点 2. 安装和…...

LabVIEW流量控制系统

LabVIEW流量控制系统 为响应水下航行体操纵舵翼环量控制技术的试验研究需求&#xff0c;通过LabVIEW开发了一套小量程流量控制系统。该系统能够满足特定流量控制范围及精度要求&#xff0c;展现了其在实验研究中的经济性、可靠性和实用性&#xff0c;具有良好的推广价值。 项…...

Python 爱心代码

Python爱心代码是一种用Python编程语言实现的图形化表达方式&#xff0c;可以通过一系列的代码来绘制出一个爱心形状。以下是一个简单的Python爱心代码示例&#xff1a; import turtle # 设置画布和画笔 canvas turtle.Screen() canvas.bgcolor("black") pen turt…...

linux kernel物理内存概述(五)

目录 概述 一、快速路径分配 1、get_page_from_freelist 2、rmqueue()函数 二、慢速路径分配 1、分配流程 三、direct_compact 概述 物理内存分配步骤 1、初始化,参数初始化 2、内存充足&#xff0c;快速分配 get_page_from_freelist 3、内存压力大&#xff0c;慢速…...

3分钟带你搞定电流采样电阻选型

大家好&#xff0c;我是砖一。 一&#xff0c;电流采样电阻的介绍 电流检测电路常用于高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 比如&#xff0c;对于电机来说&#xff0c;电流检测电路是为了检测电流功能有比…...

代码随想录算法训练营Day52 | 300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

300.最长递增子序列 这题的重点是DP数组的定义&#xff0c;子序列必须以nums[i]为最后一个元素&#xff0c;这样dp数组中后面的元素才能与前面的元素进行对比 1、DP数组定义&#xff1a;dp[i]表示以nums[i]为最后一个元素的最长递增子序列长度 2、DP数组初始化&#xff1a;全部…...

一个测试OOM killer的程序未触发OOM所带来的问题

概述 我们知道&#xff0c;由于MMU实现了虚拟地址到物理地址的转换&#xff0c;所以我们在申请虚拟地址时往往可以申请一大块内存&#xff0c;这实际上是对资源的有效利用&#xff0c;毕竟只有内存真正被投入使用时&#xff08;如memset&#xff09;才会实际分配物理内存&…...

SanctuaryAI推出Phoenix: 专为工作而设计的人形通用机器人

文章目录 1. Company2. Main2.1 关于凤凰™ (Phoenix)2.2 关于碳™(Carbon)2.3 商业化部署2.4 关于 Sanctuary Corporation 3. My thoughtsReference彩蛋&#xff1a;将手机变为桌面小机器人 唯一入选《时代》杂志 2023 年最佳发明的通用机器人。 称机器人自主做家务的速度和灵…...

李沐动手学习深度学习——4.2练习

1. 在所有其他参数保持不变的情况下&#xff0c;更改超参数num_hiddens的值&#xff0c;并查看此超参数的变化对结果有何影响。确定此超参数的最佳值。 通过改变隐藏层的数量&#xff0c;导致就是函数拟合复杂度下降&#xff0c;隐藏层过多可能导致过拟合&#xff0c;而过少导…...

CYQ.Data 支持 DaMeng 达梦数据库

DaMeng 达梦数据库介绍: 达梦数据库(DMDB)是中国自主研发的关系型数据库管理系统,由达梦科技股份有限公司开发。 达梦数据库提供了企业级的数据库解决方案,广泛应用于金融、电信、政府、制造等行业领域。 达梦数据库具有以下特点和优势: 高性能:具备高性能的并发处理…...

计网面试题整理上

1. 计算机网络的各层协议及作用&#xff1f; 计算机网络体系可以大致分为一下三种&#xff0c;OSI七层模型、TCP/IP四层模型和五层模型。 OSI七层模型&#xff1a;大而全&#xff0c;但是比较复杂、而且是先有了理论模型&#xff0c;没有实际应用。TCP/IP四层模型&#xff1a…...

code: 500 ] This subject is anonymous - it does not have any identifying

项目场景&#xff1a; 相关背景&#xff1a; 使用idea 开发java 项目&#xff0c;前端页面请求 页面中相关的接口时&#xff0c;idea 控制台有报错信息出现&#xff0c;前端请求失败。 问题描述 问题&#xff1a; 使用idea 开发java 项目&#xff0c;前端页面请求 页面中相…...

FC-AE-1553 协议

FC-AE-1553 协议 MIL-STD-1553B总线协议总线结构字格式消息传输方式 FC协议FC协议栈拓扑结构服务类型帧/序列/交换FC帧格式 FC-AE-1553网络构成帧类型命令帧状态帧数据帧 Information UnitsNC1NC2NC3-4NC5-7NT1-7 传输模式1. NC-NT2. NT-NC3. NT-NT4. 无数据字的模式命令5. 带数…...

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

理论基础 代码随想录 视频&#xff1a;从此再也不怕动态规划了&#xff0c;动态规划解题方法论大曝光 &#xff01;| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili 动态规划&#xff1a;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。所以动态…...

夫妻一方名下股权到底归谁?

生效判决摘要&#xff1a;1.夫妻一方在婚姻关系存续期间投资的收益&#xff0c;为夫妻的共同财产&#xff0c;归夫妻共同所有&#xff0c;但是并不能据此否定股权本身可能成为夫妻共同财产。婚姻关系存续期间登记在配偶一方名下的股权能否成为夫妻共同财产&#xff0c;可由司法…...

git根据文件改动将文件自动添加到缓冲区

你需要修改以下脚本中的 use_cca: false 部分 #!/bin/bash# 获取所有已修改但未暂存的文件 files$(git diff --name-only)for file in $files; do# 检查文件中是否存在"use_cca: false"if grep -q "use_cca: false" "$file"; thenecho "Ad…...

SystemVerilog Constants、Processes

SystemVerilog提供了三种类型的精化时间常数&#xff1a; •参数&#xff1a;与最初的Verilog标准相同&#xff0c;可以以相同的方式使用。 •localparameter&#xff1a;与参数类似&#xff0c;但不能被上层覆盖模块。 •specparam&#xff1a;用于指定延迟和定时值&#x…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...