Java 插入数据到Elasticsearch中进行各种类型文档的内容检索

源码下载:链接:https://pan.baidu.com/s/1D3yszkTzjwQz0vFRozQl2g?pwd=z6kb

提取码:z6kb

在这里插入图片描述

实现思路

1.搭建一个新的springboot项目,不会的请看我这篇博客:springboot项目搭建

2.添加maven依赖

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.tika</groupId><artifactId>tika-core</artifactId><version>1.27</version></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.10.0</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.10.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.6</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.25</version></dependency>

3.创建一个类,复制代码,执行main方

package com.demo.controller;import com.demo.bean.FileBean;
import org.apache.http.HttpHost;
import org.apache.tika.Tika;
import org.apache.tika.mime.MediaType;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import com.alibaba.fastjson.JSON;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;public class EsController {private static EsController FileToBase64;// 使用tika库自动获取文件类型public static String getFileTypeByDefaultTika(String filePathUrl) throws IOException, URISyntaxException {// 从 URL 创建一个 File 对象File file = new File(new URL("file:///" + filePathUrl).toURI());// 使用 Tika 来检测文件的 MIME 类型Tika tika = new Tika();MediaType mediaType = MediaType.parse(tika.detect(file));// 从 MIME 类型中提取文件的基本类型(如 pdf、image、video 等)String fileType = mediaType.getSubtype();return fileType;}// 转换文件为base64public static String fileToBase64(String filePath) throws IOException {byte[] fileContent = Files.readAllBytes(Paths.get(filePath));return Base64.getEncoder().encodeToString(fileContent);}// 根据文件类型判断排除音视频类文件public static String fileFilterate(String pathUrl) {try {String fileType = getFileTypeByDefaultTika(pathUrl);if (!fileType.contains("video")&& !fileType.contains("image")&& !"application/zip".equals(fileType)) {return fileToBase64(pathUrl);}return "";} catch (IOException e) {e.printStackTrace();return "";} catch (URISyntaxException e) {e.printStackTrace();return "";}}public static void main(String[] args) throws IOException {// 初始化RestHighLevelClient,localhost就是ES的ip地址,端口号为9200RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));RestHighLevelClient client = new RestHighLevelClient(builder);//文件转成base,存入ES中String path = "C:\\Users\\83677\\Desktop\\测试4.docx";String file_base64 = FileToBase64.fileFilterate(path);//拿到base64,存入ES中FileBean filebean = new FileBean();filebean.setFile_id("1");filebean.setFile_name("测试4.docx");filebean.setFile_url("http://文件存储地址:8080/xxx/docs/raw/master/性能分析与内存问题排查思考.pdf");filebean.setFile_type("docx");filebean.setContent(file_base64);filebean.setFile_size("33");filebean.setFile_dir_name("yryy");filebean.setFile_suffix(".docx");filebean.setGroup_file_id("1234653");//把实体对象转为字符串String body = JSON.toJSONString(filebean);//file_data 是索引名称,这里就是插入数据到ES的核心部分IndexRequest indexRequest = new IndexRequest().index("file_data").source(body, XContentType.JSON)//请求参数,类型为JSON.setPipeline("attachment") //上传时使用attachment pipline进行提取文件.timeout(TimeValue.timeValueMinutes(10));client.index(indexRequest, RequestOptions.DEFAULT);// 关闭客户端client.close();}
}

4.实体类对象,我的示例

package com.demo.bean;import lombok.Data;@Data
public class FileBean {private String file_id;private String file_name;private String file_url;private String file_type;private String content;private String group_file_id;private String file_suffix;private String file_size;private String file_dir_name;}

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

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

相关文章

牛客周赛 Round 42(C:小红的素数合并)

题目链接: C-小红的素数合并_牛客周赛 Round 42 (nowcoder.com) 题目简述: 给你n个素数&#xff0c;让你每两个素数进行合并成一个(这两个素数相乘后的值)&#xff0c;必须要合并到最后不能再去合并&#xff0c;问最后合并后的数组的最大值和最小的差最小是多少呢? 分析: …

计算机毕业设计源码 | 基于SpringBoot的线上教学系统 答疑辅导网站(附源码)

1&#xff0c;项目介绍 1.1 项目背景 网络问答平台经历了多年的发展&#xff0c;目前处于一个日益成熟的状态。最早的网络问答平台是知乎&#xff0c;知乎的创立者认为有许多信息在互联网上没有被记录和共享&#xff0c;于是他们决定创造一个平台&#xff0c;能够让更多人可以…

【翻译】Processing系列|(四)用 Android Studio 从 0 到 1 进行 Processing 安卓开发

原文链接&#xff1a;Processing for Android Developing with Android Studio 朋友跟我说官方教程里也写了该怎么用 Android Studio 开发&#xff0c;并且亲测可行。这种方式确实能开发出结构更加清晰、额外组件更加少的程序&#xff0c;比上一篇文章中直接克隆 Processing-An…

QtMsBuild并行编译

记录一个QtMsBuild并行编译的报错问题&#xff0c;需求是支持同时进行多个vsqt的工程进行编译&#xff0c;使用的是msbuild.exe工具编译sln工程&#xff0c;同时编译时&#xff0c;有的工程会报Qt::BuildLock timeout&#xff0c;主要原因是Qt的编译脚本为了防止出现资源冲突&a…

C# WinForm —— 21 RichTextBox 使用

1. 加载文件到控件中 加载文件时&#xff0c;要设置文件的路径和类型RichTextBoxStreamType&#xff0c;文件类型包含&#xff1a; RichText 0&#xff1a;富文本格式&#xff08;RTF&#xff09;流PlainText 1&#xff1a;纯文本流对象链接和嵌入&#xff08;OLE&#xff…

基于RK3568的鸿蒙通行一体机方案项目

鸿蒙通行一体机方案以鸿蒙版AIoT-3568X人工智能主板为核心平台&#xff0c;搭载OpenHarmony操作系统&#xff0c;使用自研算法和国产芯片&#xff0c;可管可控&#xff0c;并提供身份识别以及其他外设配件生态链支持。 01 项目概述 项目使用场景 鸿蒙版通行一体机方案凭借自主…

win11此电脑右键“属性“选项,无法打开怎么解决?

方法如下&#xff1a; 1. 按【 Win X 】组合键&#xff0c;或【 右键】点击任务栏上的【 Windows开始菜单】&#xff0c;在打开的隐藏菜单项中&#xff0c;选择【 终端管理员】&#xff1b; 2. 用户账户控制窗口&#xff0c;你要允许此应用对你的设备进行更改吗&#xff1f;点…

深入 Go 语言:使用 math/rand 包实现高效随机数生成

深入 Go 语言&#xff1a;使用 math/rand 包实现高效随机数生成 介绍math/rand 包的核心功能设计哲学应用场景 基础使用方法初始化和种子设置设置种子创建私有随机数生成器 基础函数详解生成整数生成特定范围的整数生成浮点数随机置乱数组 进阶技巧随机数的统计属性生成正态分布…

分布式系统的一致性与共识算法(一)

前言 etcd是线性一致性读&#xff0c;而zk却是顺序一致性读&#xff0c;再加上各种共识、强弱一致的名词&#xff0c;看到欸度时候总会混淆&#xff0c;这里会给出一些例子来帮助理解。 什么是一致性&#xff1f; 在谈到一致性这个词时&#xff0c;你会想到CAP理论的consist…

高级炫酷的个人主页or引导页

高级炫酷个人主页 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html><html lang"zh-CN"><head><meta charset"utf-8"><meta content"yes" name"apple-mobile-web-app-capable"> &l…

shiro_attack工具-shiro反序列化漏洞的快速检测和利用

shiro反序列化漏洞的快速检测和利用 前言 今天分享一个好用的渗透测试工具&#xff0c;主要是针对shiro框架漏洞的&#xff0c;它可以自动的爆破shiro密钥&#xff0c;同时可以写入大马&#xff0c;本人实战中觉得很好用&#xff01;&#xff01;&#xff01; 工具名称 shi…

2024年网络安全威胁

随着2024年的到来&#xff0c;数字世界的版图正在以前所未有的速度扩张&#xff0c;引领我们进入一个技术革新的新时代。然而&#xff0c;这飞速的发展同时也催生了一系列错综复杂的网络安全挑战。在这个数字平台与我们生活日益紧密交织的时代&#xff0c;深入了解这些新兴的威…

相约蓉城 | 全视通邀您参加 CHCC 2024第25届全国医院建设大会

第25届全国医院建设大会暨国际医院建设、装备及管理展览会&#xff08;CHCC2024&#xff09;&#xff0c;将于5月17日-19日在成都中国西部国际博览城盛大启幕。 全视通将携智慧病房、智慧门诊、智慧手术室、智慧后勤、智慧康养等产品方案亮相11号厅K05展位&#xff0c;期待与您…

乡村振兴与农村基础设施建设:加大投入力度,提升建设水平,完善农村基础设施网络,打造宜居宜业的美丽乡村

一、引言 乡村振兴战略是我国在新时代推进农业农村现代化的重大战略部署&#xff0c;其核心目标是实现乡村的全面振兴&#xff0c;促进农业强、农村美、农民富。农村基础设施建设作为乡村振兴的基石&#xff0c;其建设水平直接关系到乡村经济的持续健康发展、乡村环境的改善以…

vue-pure-admin项目内复制文字粘贴到word中之后存在边框问题

vue-pure-admin项目内复制文字粘贴到word中之后存在黑色边框是由于reset.scss文件内设置了通配符的border样式 修改前 代码 *, ::before, ::after {box-sizing: border-box;// 添加这个样式会导致复制的文字粘贴到word中带有边框问题border-color: currentColor;border-styl…

mxnet.image.resize_short()函数详解

mx.image.resize_short是MXNet中用于调整图像大小的一个函数。它将图像的短边调整到指定的长度&#xff0c;同时保持图像的宽高比。函数定义如下&#xff0c; mx.image.resize_short(src, size, interp2) src&#xff1a;输入的图像&#xff0c;可以是NDArray或者numpy.ndarr…

数据结构链表详解(不仅顺序表可以,我链表也可以)

目录 顺序表的缺点&#xff1a; 链表 链表的概念及其结构 链表的分类 链表的实现 链表形式&#xff1a; 节点的创建: 链表的增删&#xff1a; 尾插 头插 尾删 头删 查找 打印 链表的重点 1、尾删&#xff1a;则是需要找到尾节点&#xff0c;进行删除 2、头删&a…

智能决策引擎架构设计

智能决策引擎概述 智能决策引擎系统是在大数据支撑下,根据行业专家经验制定规则策略、以及机器学习/深度学习/AI领域建立的模型运算,对当前的业务进行全面的评估,并给出决策结果的一套系统。 一套商业决策引擎系统动辄百万而且需要不断加钱定制,大多数企业最终仍会走上自研…

Springboot整合 Spring Cloud OpenFeign

1.OpenFeign简介 1.相比于Netflix Feign&#xff0c;OpenFeign支持Spring MVC注解&#xff0c;整合了Ribbon(springcloud在Hoxton.M2 RELEASED版本之后舍弃Ribbon。需手动引入spring-cloud-loadbalancer)和Nacos。 2.使得开发人员调用远程接口或者服务之间相互调用就像调用本地…

威纶通触摸屏下载项目文件后,文本都变成了框框的解决办法

威纶通触摸屏下载项目文件后,文本都变成了框框的解决办法 我们在用Easy builder pro编辑某些项目的情况下,编译没问题,为什么下载到触摸屏之后,文本都变成了框框了呢? 分析:: 不能正常显示文本的原因是字体文件缺失。 解决办法: 如下图所示,在Easy builder pro软件中,…