从ElasticSearch中查询课程信息。

添加课程索引

接口信息如下

路径地址 http://localhost:63040/search/index/course
请求方式 POST
请求参数 CourseIndex
返回结果 Boolean

课程文档参数

CourseIndex
@Data
public class CourseIndex implements Serializable {

private static final long serialVersionUID = 1L;

/**
* 主键
*/
@NotNull(message = "课程id为空")
private Long id;

/**
* 机构ID
*/
private Long companyId;

/**
* 公司名称
*/
private String companyName;

/**
* 课程名称
*/
private String name;

/**
* 适用人群
*/
private String users;

/**
* 标签
*/
private String tags;


/**
* 大分类
*/
private String mt;

/**
* 大分类名称
*/
private String mtName;

/**
* 小分类
*/
private String st;

/**
* 小分类名称
*/
private String stName;



/**
* 课程等级
*/
private String grade;

/**
* 教育模式
*/
private String teachmode;
/**
* 课程图片
*/
private String pic;

/**
* 课程介绍
*/
private String description;


/**
* 发布时间
*/
@JSONField(format="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createDate;

/**
* 状态
*/
private String status;

/**
* 备注
*/
private String remark;

/**
* 收费规则,对应数据字典--203
*/
private String charge;

/**
* 现价
*/
private Float price;
/**
* 原价
*/
private Float originalPrice;

/**
* 课程有效期天数
*/
private Integer validDays;

}

定义Service

新建CourseSearchService接口,定义课程搜索接口

IndexService
/**
* 课程索引service
*/
public interface IndexService {

/**
* 添加索引
*
* @param indexName 索引名称
* @param id 主键
* @param object 索引对象
* @return Boolean true表示成功,false失败
*/
public Boolean addCourseIndex(String indexName, String id, Object object);


/**
* 更新索引
*
* @param indexName 索引名称
* @param id 主键
* @param object 索引对象
* @return Boolean true表示成功,false失败
*/
public Boolean updateCourseIndex(String indexName, String id, Object object);

/**
* 删除索引
*
* @param indexName 索引名称
* @param id 主键
* @return java.lang.Boolean
*/
public Boolean deleteCourseIndex(String indexName, String id);

}

实现该方法,创建其实现类IndexServiceImpl

IndexServiceImpl
@Slf4j
@Service
public class IndexServiceImpl implements IndexService {

private final RestHighLevelClient restHighLevelClient;

public IndexServiceImpl(RestHighLevelClient restHighLevelClient) {
this.restHighLevelClient = restHighLevelClient;
}

/**
* 添加索引
*
* @param indexName 索引名称
* @param id 主键
* @param object 索引对象
* @return Boolean true表示成功,false失败
*/
@Override
public Boolean addCourseIndex(String indexName, String id, Object object) {
String jsonString = JSON.toJSONString(object);
IndexRequest indexRequest = new IndexRequest(indexName).id(id);
// 指定索引文档内容
indexRequest.source(jsonString, XContentType.JSON);
IndexResponse indexResponse = null;
try {
indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("添加索引出错: ", e);
throw new BizException("添加索引出错");
}
String name = indexResponse.getResult().name();
return name.equalsIgnoreCase("created") || name.equalsIgnoreCase("updated");
}

/**
* 更新索引
*
* @param indexName 索引名称
* @param id 主键
* @param object 索引对象
* @return Boolean true表示成功,false失败
*/
@Override
public Boolean updateCourseIndex(String indexName, String id, Object object) {
String jsonString = JSON.toJSONString(object);
UpdateRequest updateRequest = new UpdateRequest(indexName, id);
updateRequest.doc(jsonString, XContentType.JSON);
UpdateResponse updateResponse = null;
try {
updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("更新索引出错: ",e);
throw new BizException("更新索引出错");
}
DocWriteResponse.Result result = updateResponse.getResult();
return result.name().equalsIgnoreCase("updated");
}

/**
* 删除索引
*
* @param indexName 索引名称
* @param id 主键
* @return java.lang.Boolean
*/
@Override
public Boolean deleteCourseIndex(String indexName, String id) {
//删除索引请求对象
DeleteRequest deleteRequest = new DeleteRequest(indexName,id);
//响应对象
DeleteResponse deleteResponse = null;
try {
deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("删除索引出错: ",e);
throw new BizException("删除索引出错");
}
//获取响应结果
DocWriteResponse.Result result = deleteResponse.getResult();
return result.name().equalsIgnoreCase("deleted");
}
}

定义Controller

CourseIndexController
@Api(value = "课程信息索引接口", tags = "课程信息索引接口")
@RestController
@RequestMapping("/index")
@RefreshScope
public class CourseIndexController {

@Value("${elasticsearch.course.index}")
private String courseIndexStore;
private final IndexService indexService;

public CourseIndexController(IndexService indexService) {
this.indexService = indexService;
}

@ApiOperation("添加课程索引")
@PostMapping("course")
public Boolean add(@RequestBody @Validated CourseIndex courseIndex) {
Long id = courseIndex.getId();
Boolean result = indexService.addCourseIndex(courseIndexStore, String.valueOf(id), courseIndex);
if (!result) {
throw new BizException("添加课程索引失败");
}
return true;
}
}