先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
正文
这里是get请求,需要注意一定不要选成post,否则会直接对数据进行更新。
返回值:
{
"_index": "test",
"_type": "_doc",
"_id": "nFez2IgBadwYgUd60r2A",
"_version": 1,
"_seq_no": 1,
"_primary_term": 1,
"found": true,
"_source": {
"title": "小米手机1",
"category": "小米1",
"image": "www.yy.com",
"price": 3999.00
}
}
然后删除某一条数据:
只需要将查找的请求方式改成delete就可以了。
返回值中的result是区分查找,插入和删除的方式。
还有就是查找某个表的所有数据。
使用get请求:127.0.0.1:9200/test/_search
最后就是清空这个表的所有数据
127.0.0.1:9200/test/_delete_by_query
test为要清空的表明,_delete_by_query可以理解为固定写法
请求体:
{
"query": {
"match_all": {}
}
}
返回值:
{
"took": 133,
"timed_out": false,
"total": 1,
"deleted": 1,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"failures": []
}
4.打开管道
curl -X PUT "localhost:9200/_ingest/pipeline/attachment" -d '{
"description" : "Extract attachment information",
"processors":[
{
"attachment":{
"field":"data",
"indexed_chars" : -1,
"ignore_missing":true
}
},
{
"remove":{"field":"data"}
}]}'
attachment是管道名称,后面JAVA代码里有用到,可以该
这里应该用java代码去创建管道,后期我改一下
可能遇到的报错:{“error”:“Content-Type header [application/x-www-form-urlencoded] is not supported”,“status”:406}
解决:添加-H ‘content-Type:application/json’
5.JAVA编程
pom中引入elsearch和fastjson
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.26</version>
</dependency>
上传方法
public AjaxResult upload(MultipartFile file) {
if (file.isEmpty()) {
// 处理文件为空的情况
AjaxResult.error("文件为空!");
}
String uploadPath = "H:/esupload/";
try {
String fileName = file.getOriginalFilename();
String[] nameArray=fileName.split("\\.");
//todo 如果以后要用的Demo一定要修改这里!这里只是为了快速测试,没有写业务代码
if(nameArray.length!=2){
return null;
}
String prefix=nameArray[0];
String suffix=nameArray[1];
long fileSize=file.getSize();
String filePath = uploadPath + File.separator + UUID.randomUUID()+"."+suffix;
// 保存文件到指定路径
file.transferTo(new File(filePath));
//将文件传到es上
HttpClient httpClient = HttpClients.createDefault();
try {
// 设置 Elasticsearch 主机和端口
String elasticHost = "http://127.0.0.1";
int elasticPort = 9200;
// 设置索引名称
String indexName = "book";
// 指定要索引的文档路径
String documentPath = filePath; // 替换为实际的文档路径
// 读取文档内容并进行 Base64 编码
byte[] documentData = Files.readAllBytes(Paths.get(documentPath));
String encodedDocument = Base64.getEncoder().encodeToString(documentData);
// 创建文档 JSON
//String documentJson = String.format("{\"data\":\"%s\"}", encodedDocument);
String documentJson = String.format("{\"data\":\"%s\", \"prefix\":\"%s\", \"suffix\":\"%s\", \"filesize\":%d}",
encodedDocument, prefix, suffix, fileSize); // 创建 POST 请求
HttpPost postRequest = new HttpPost(String.format("%s:%d/%s/_doc?pipeline=attachment", elasticHost, elasticPort, indexName));
// 设置请求主体为 JSON 格式
HttpEntity entity = new StringEntity(documentJson, ContentType.APPLICATION_JSON);
postRequest.setEntity(entity);
/* postRequest.setEntity(entity);*/
// 发送请求
HttpResponse response = httpClient.execute(postRequest);
// 处理响应
String responseBody = EntityUtils.toString(response.getEntity());
System.out.println(responseBody);
} catch (IOException e) {
e.printStackTrace();
} finally {
}
// 处理文件上传成功的情况
return AjaxResult.success("上传成功!");
} catch (IOException e) {
// 处理文件上传失败的情况
return AjaxResult.error("系统异常!");
}
}
列表方法
public List<FileEntity> getList(HttpServletResponse response, String matchName, String searchValue) {
if (StringUtils.isEmpty(matchName)) {
matchName = "attachment.content";
}
List<FileEntity> files = new ArrayList<>();
// 创建 Elasticsearch 客户端,用于信息查询
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")));
try {
// 设置要查询的索引名称
String indexName = "book";
// 构建查询请求
SearchRequest searchRequest = new SearchRequest(indexName);
// 构建查询条件
/* MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("attachment.content", searchValue);
*/
if (StringUtils.isEmpty(searchValue)) {
searchValue = "silan";
// 使用TermQueryBuilder进行精确匹配
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.size(10); // 设置返回的文档数量,默认为 10
searchSourceBuilder.timeout(TimeValue.timeValueSeconds(10)); // 设置超时时间
}else {
MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery(matchName, searchValue);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(matchPhraseQueryBuilder);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder().query(boolQueryBuilder);
searchRequest.source(sourceBuilder);
}
// 设置排序规则
/* sourceBuilder.sort("_source.content", SortOrder.ASC);*/
// 设置分页
/* int from = 0; // 开始索引
int size = 10; // 返回结果数量
sourceBuilder.from(from);
sourceBuilder.size(size);*/
// 发起查询请求
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
// 处理查询结果
SearchHits hits = searchResponse.getHits();
for (SearchHit hit : hits) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
String id = hit.getId();
String source = hit.getSourceAsString();
try {
// 将 JSON 字符串转换为 JSONObject
JSONObject jsonObject = JSONObject.parseObject(source);
// 访问 JSONObject 的属性
String data = jsonObject.getString("data");
JSONObject attachment = jsonObject.getJSONObject("attachment");
String contentType = attachment.getString("content_type");
String contentLength = attachment.getString("content_length");
String content = attachment.getString("content");
String author = attachment.getString("author");
String prefix = jsonObject.getString("prefix");
String suffix = jsonObject.getString("suffix");
String filesize = jsonObject.getString("filesize");
FileEntity fileEntity = new FileEntity();
fileEntity.setId(id);
fileEntity.setData(data);
fileEntity.setName(prefix+"."+suffix);
fileEntity.setType(contentType);
fileEntity.setSize(filesize + "字节");
fileEntity.setAuthor(author);
fileEntity.setContent(content.substring(0, Math.min(content.length(), 300)));
fileEntity.setUploadTime(new Date());
files.add(fileEntity);
// 打印结果
System.out.println("Data: " + data);
System.out.println("Content Type: " + contentType);
System.out.println("Content: " + content);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return files;
}
FileEntity
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
}
}
return files;
}
FileEntity
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
[外链图片转存中...(img-H8VeAEod-1713173839364)]
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**