|
@@ -1,17 +1,24 @@
|
|
-package com.futu.course.es.Service;
|
|
|
|
|
|
+package com.futu.course.es.Service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.futu.course.course.domain.Course;
|
|
import com.futu.course.course.domain.Course;
|
|
import com.futu.course.course.service.impl.CourseServiceImpl;
|
|
import com.futu.course.course.service.impl.CourseServiceImpl;
|
|
|
|
+import com.futu.course.es.Service.ESService;
|
|
import com.futu.course.es.domain.ESCourse;
|
|
import com.futu.course.es.domain.ESCourse;
|
|
|
|
+import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
|
|
|
|
+import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
|
|
import org.elasticsearch.action.bulk.BulkRequest;
|
|
import org.elasticsearch.action.bulk.BulkRequest;
|
|
import org.elasticsearch.action.delete.DeleteRequest;
|
|
import org.elasticsearch.action.delete.DeleteRequest;
|
|
import org.elasticsearch.action.index.IndexRequest;
|
|
import org.elasticsearch.action.index.IndexRequest;
|
|
import org.elasticsearch.action.search.SearchRequest;
|
|
import org.elasticsearch.action.search.SearchRequest;
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
import org.elasticsearch.action.support.WriteRequest;
|
|
import org.elasticsearch.action.support.WriteRequest;
|
|
|
|
+import org.elasticsearch.client.IndicesClient;
|
|
import org.elasticsearch.client.RequestOptions;
|
|
import org.elasticsearch.client.RequestOptions;
|
|
import org.elasticsearch.client.RestHighLevelClient;
|
|
import org.elasticsearch.client.RestHighLevelClient;
|
|
|
|
+import org.elasticsearch.client.indices.CreateIndexRequest;
|
|
|
|
+import org.elasticsearch.client.indices.CreateIndexResponse;
|
|
|
|
+import org.elasticsearch.client.indices.GetIndexRequest;
|
|
import org.elasticsearch.common.bytes.BytesReference;
|
|
import org.elasticsearch.common.bytes.BytesReference;
|
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
|
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
|
@@ -19,6 +26,8 @@ import org.elasticsearch.index.query.QueryBuilders;
|
|
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
|
|
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
|
|
import org.elasticsearch.search.SearchHit;
|
|
import org.elasticsearch.search.SearchHit;
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
|
|
+import org.elasticsearch.xcontent.XContentBuilder;
|
|
|
|
+import org.elasticsearch.xcontent.XContentFactory;
|
|
import org.elasticsearch.xcontent.XContentType;
|
|
import org.elasticsearch.xcontent.XContentType;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -39,6 +48,8 @@ public class ESCourseService {
|
|
RestHighLevelClient client;
|
|
RestHighLevelClient client;
|
|
@Autowired
|
|
@Autowired
|
|
CourseServiceImpl courseService;
|
|
CourseServiceImpl courseService;
|
|
|
|
+ @Autowired
|
|
|
|
+ ESService esService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @title: search
|
|
* @title: search
|
|
@@ -86,6 +97,8 @@ public class ESCourseService {
|
|
*/
|
|
*/
|
|
@Transactional
|
|
@Transactional
|
|
public void MysqlInterES() throws IOException {
|
|
public void MysqlInterES() throws IOException {
|
|
|
|
+// 创建索引
|
|
|
|
+ this.checkAndCreateIndex();
|
|
// ES删除所有数据
|
|
// ES删除所有数据
|
|
DeleteByQueryRequest request = new DeleteByQueryRequest("course");
|
|
DeleteByQueryRequest request = new DeleteByQueryRequest("course");
|
|
// 使用 MatchAllQuery 匹配所有文档
|
|
// 使用 MatchAllQuery 匹配所有文档
|
|
@@ -97,7 +110,7 @@ public class ESCourseService {
|
|
// 初始化数据
|
|
// 初始化数据
|
|
for (Course course : list) {
|
|
for (Course course : list) {
|
|
ESCourse esCourse = new ESCourse();
|
|
ESCourse esCourse = new ESCourse();
|
|
- esCourse.setId(course.getId());
|
|
|
|
|
|
+ esCourse.setId(String.valueOf(course.getId()));
|
|
esCourse.setName(course.getTitle());
|
|
esCourse.setName(course.getTitle());
|
|
esCourse.setCategoryId(Long.valueOf(course.getCategoryId()));
|
|
esCourse.setCategoryId(Long.valueOf(course.getCategoryId()));
|
|
esCourse.setCoverImg(course.getCoverImg());
|
|
esCourse.setCoverImg(course.getCoverImg());
|
|
@@ -148,9 +161,9 @@ public class ESCourseService {
|
|
// 处理可能的类型转换问题
|
|
// 处理可能的类型转换问题
|
|
Object idObj = sourceAsMap.get("id");
|
|
Object idObj = sourceAsMap.get("id");
|
|
if (idObj instanceof Integer) {
|
|
if (idObj instanceof Integer) {
|
|
- esCourse.setId(((Integer) idObj).longValue());
|
|
|
|
|
|
+ esCourse.setId(String.valueOf(((Integer) idObj).longValue()));
|
|
} else if (idObj instanceof Long) {
|
|
} else if (idObj instanceof Long) {
|
|
- esCourse.setId((Long) idObj);
|
|
|
|
|
|
+ esCourse.setId(String.valueOf((Long) idObj));
|
|
}
|
|
}
|
|
|
|
|
|
esCourse.setName((String) sourceAsMap.get("name"));
|
|
esCourse.setName((String) sourceAsMap.get("name"));
|
|
@@ -191,9 +204,9 @@ public class ESCourseService {
|
|
// 处理可能的类型转换问题
|
|
// 处理可能的类型转换问题
|
|
Object idObj = sourceAsMap.get("id");
|
|
Object idObj = sourceAsMap.get("id");
|
|
if (idObj instanceof Integer) {
|
|
if (idObj instanceof Integer) {
|
|
- esCourse.setId(((Integer) idObj).longValue());
|
|
|
|
|
|
+ esCourse.setId(String.valueOf(((Integer) idObj).longValue()));
|
|
} else if (idObj instanceof Long) {
|
|
} else if (idObj instanceof Long) {
|
|
- esCourse.setId((Long) idObj);
|
|
|
|
|
|
+ esCourse.setId(String.valueOf((Long) idObj));
|
|
}
|
|
}
|
|
|
|
|
|
esCourse.setName((String) sourceAsMap.get("name"));
|
|
esCourse.setName((String) sourceAsMap.get("name"));
|
|
@@ -217,7 +230,14 @@ public class ESCourseService {
|
|
}
|
|
}
|
|
return esCourses;
|
|
return esCourses;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ /**
|
|
|
|
+ * @title: SelCourse
|
|
|
|
+ * @desc: 搜索并将搜索记录写入到MongoDB中
|
|
|
|
+ * @params ()
|
|
|
|
+ * @return: Result
|
|
|
|
+ * @author: 杨旭朋
|
|
|
|
+ * @date: 2025/5/8 8:35
|
|
|
|
+ */
|
|
public HashSet<ESCourse> SelCourse(String name) throws IOException {
|
|
public HashSet<ESCourse> SelCourse(String name) throws IOException {
|
|
// 创建搜索请求
|
|
// 创建搜索请求
|
|
SearchRequest searchRequest = new SearchRequest("course");
|
|
SearchRequest searchRequest = new SearchRequest("course");
|
|
@@ -244,9 +264,9 @@ public class ESCourseService {
|
|
// 处理可能的类型转换问题
|
|
// 处理可能的类型转换问题
|
|
Object idObj = sourceAsMap.get("id");
|
|
Object idObj = sourceAsMap.get("id");
|
|
if (idObj instanceof Integer) {
|
|
if (idObj instanceof Integer) {
|
|
- esCourse.setId(((Integer) idObj).longValue());
|
|
|
|
|
|
+ esCourse.setId(String.valueOf(((Integer) idObj).longValue()));
|
|
} else if (idObj instanceof Long) {
|
|
} else if (idObj instanceof Long) {
|
|
- esCourse.setId((Long) idObj);
|
|
|
|
|
|
+ esCourse.setId(String.valueOf((Long) idObj));
|
|
}
|
|
}
|
|
|
|
|
|
esCourse.setName((String) sourceAsMap.get("name"));
|
|
esCourse.setName((String) sourceAsMap.get("name"));
|
|
@@ -266,7 +286,97 @@ public class ESCourseService {
|
|
esCourse.setCoverImg((String) sourceAsMap.get("cover_img"));
|
|
esCourse.setCoverImg((String) sourceAsMap.get("cover_img"));
|
|
esCourses.add(esCourse);
|
|
esCourses.add(esCourse);
|
|
}
|
|
}
|
|
|
|
+ this.SaveMongoDB(name);
|
|
return esCourses;
|
|
return esCourses;
|
|
}
|
|
}
|
|
|
|
+ /**
|
|
|
|
+ * @title: SaveMongoDB
|
|
|
|
+ * @desc: 保存聊天记录到MongoDB中
|
|
|
|
+ * @params String name
|
|
|
|
+ * @return: void
|
|
|
|
+ * @author: 杨旭朋
|
|
|
|
+ * @date: 2025/5/8 9:14
|
|
|
|
+ */
|
|
|
|
+ public void SaveMongoDB(String name){
|
|
|
|
+ List<ESCourse> all = esService.findAll();
|
|
|
|
+ int i = 0;
|
|
|
|
+ for (ESCourse esCourse : all) {
|
|
|
|
+ if (esCourse.getName().equals(name)){
|
|
|
|
+ ESCourse byId = esService.findById(esCourse.getId().toString()).get();
|
|
|
|
+ byId.setCreateTime(new Date());
|
|
|
|
+ esService.save(byId);
|
|
|
|
+ i++;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (i == 0){
|
|
|
|
+ ESCourse esCourse = new ESCourse();
|
|
|
|
+ String string = UUID.randomUUID().toString();
|
|
|
|
+ esCourse.setId(string);
|
|
|
|
+ esCourse.setName(name);
|
|
|
|
+ esCourse.setCreateTime(new Date());
|
|
|
|
+ esCourse.setUid(1L);
|
|
|
|
+ esService.save(esCourse);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * @title: checkAndCreateIndex
|
|
|
|
+ * @desc: 数据初始化
|
|
|
|
+ * @params ()
|
|
|
|
+ * @return: Result
|
|
|
|
+ * @author: 杨旭朋
|
|
|
|
+ * @date: 2025/5/8 15:25
|
|
|
|
+ */
|
|
|
|
+ public boolean checkAndCreateIndex() throws IOException {
|
|
|
|
+ IndicesClient indicesClient = client.indices();
|
|
|
|
+ // 检查索引是否存在
|
|
|
|
+ GetIndexRequest getIndexRequest = new GetIndexRequest("course");
|
|
|
|
+ boolean exists = indicesClient.exists(getIndexRequest, RequestOptions.DEFAULT);
|
|
|
|
+
|
|
|
|
+ if (!exists) {
|
|
|
|
+ // 索引不存在,创建索引
|
|
|
|
+ CreateIndexRequest createRequest = new CreateIndexRequest("course");
|
|
|
|
+ // 设置索引映射
|
|
|
|
+ XContentBuilder mappingBuilder = XContentFactory.jsonBuilder();
|
|
|
|
+ mappingBuilder.startObject()
|
|
|
|
+ .startObject("properties")
|
|
|
|
+ .startObject("id")
|
|
|
|
+ .field("type", "long")
|
|
|
|
+ .endObject()
|
|
|
|
+ .startObject("name")
|
|
|
|
+ .field("type", "text")
|
|
|
|
+ .field("analyzer", "ik_max_word")
|
|
|
|
+ .endObject()
|
|
|
|
+ .startObject("uid")
|
|
|
|
+ .field("type", "long")
|
|
|
|
+ .endObject()
|
|
|
|
+ .startObject("create_time")
|
|
|
|
+ .field("type", "date")
|
|
|
|
+ .field("format", "yyyy-MM-dd HH:mm:ss")
|
|
|
|
+ .endObject()
|
|
|
|
+ .startObject("price")
|
|
|
|
+ .field("type", "float")
|
|
|
|
+ .endObject()
|
|
|
|
+ .startObject("category_id")
|
|
|
|
+ .field("type", "long")
|
|
|
|
+ .endObject()
|
|
|
|
+ .startObject("cover_img")
|
|
|
|
+ .field("type", "keyword")
|
|
|
|
+ .endObject()
|
|
|
|
+ .endObject()
|
|
|
|
+ .endObject();
|
|
|
|
+ createRequest.mapping(mappingBuilder);
|
|
|
|
+
|
|
|
|
+ CreateIndexResponse createResponse = indicesClient.create(createRequest, RequestOptions.DEFAULT);
|
|
|
|
+ if (createResponse.isAcknowledged()) {
|
|
|
|
+ System.out.println("索引course创建成功");
|
|
|
|
+ return true;
|
|
|
|
+ } else {
|
|
|
|
+ System.out.println("索引course创建失败");
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ System.out.println("索引course已存在");
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|