
yml配置:org.springframework.boot spring-boot-starter-data-elasticsearch
spring:
data:
elasticsearch:
elasticsearch:
cluster-nodes: localhost:9200
cluster-name: my-es
1.创建实体Bean对象
在Elasticsearch 6.X 版本中,不建议使用type,而且在7.X版本中将会彻底废弃type,所以此处我只指定了indexName,没有指定type。这里,一个journal代表一期彩票,同时代表一条索引记录。
类比关系型数据库的话,Index相当于表,document相当于记录
package com.yl.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.elasticsearch.annotations.document;
import java.time.LocalDateTime;
import java.util.List;
@TableName("sys_journal")
@Data
@document(indexName = "journal") //es索引,索引名必须小写
public class Journal {
private Long id;
private String title; //标题
private String titleDesc; //标题全本
private String issue; //期号 唯一
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private LocalDateTime date; //期刊日期 yyyy-MM-dd
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private LocalDateTime dateStr; //期刊日期字符串格式
private String url; //版面地址
private String stageDesc; //版面备注
private Integer type; //期刊类型:.1:中国体彩报 2.其他
private Integer status; //状态:1.正常 2.删除
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private LocalDateTime grabDate; //抓取时间 yyyy-MM-dd HH:mm:ss
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private LocalDateTime createdAt; //创建时间 yyyy-MM-dd HH:mm:ss
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private LocalDateTime updatedAt; //更新时间 yyyy-MM-dd HH:mm:ss
@TableField(exist = false)
private List journalPages;
}
2.然后,需要自己定义一个接口,并继承ElasticsearchRepository
package com.yl.repository; import com.yl.entity.Journal; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface JournalRepository extends ElasticsearchRepository3.接下来,定义service接口{ }
package com.yl.service;
import com.alibaba.fastjson.JSONObject;
import com.yl.entity.BlogModel;
import org.springframework.data.domain.Page;
import org.springframework.data.elasticsearch.annotations.Query;
import java.util.List;
import java.util.Optional;
public interface JournalService {
long count();
Journal save(Journal journal);
void delete(Journal journal);
Iterable findAll();
List findByTitle(String name);
Page pageQuery(JSonObject param);
Optional findById(String id);
void deleteById(String id);
Page findAll(Integer pageIndex, Integer pageSize);
//自定义方法
List findByTitleLike(String keyword);
//自定义方法
List findByTitleCustom(String keyword);
}
package com.yl.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yl.repository.JournalRepository;
import com.yl.entity.Journal;
import com.yl.service.JournalService;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
public class JournalServiceImpl implements JournalService {
@Autowired
private JournalRepository journalRepository;
@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;
@Override
public long count() {
return journalRepository.count();
}
@Override
public Journal save(Journal journal) {
return journalRepository.save(journal);
}
@Override
public void delete(Journal journal) {
journalRepository.delete(journal);
}
@Override
public Optional findById(String id) {
return journalRepository.findById(id);
}
@Override
public void deleteById(String id) {
journalRepository.deleteById(id);
}
@Override
public Iterable findAll() {
return journalRepository.findAll();
}
@Override
public List findByTitle(String title) {
List list = new ArrayList<>();
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("title", title);
Iterable iterable =journalRepository.search(matchQueryBuilder);
iterable.forEach(e->list.add(e));
return list;
}
@Override
public Page pageQuery(JSonObject param) {
String indexName = param.getString("indexName");
Integer page = param.getInteger("page");
Integer size = param.getInteger("size");
NativeSearchQuery searchQuery=new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchPhraseQuery("title", indexName))
.withPageable(PageRequest.of(page, size))
.build();
return journalRepository.search(searchQuery);
}
@Override
public List findByTitleLike(String keyword) {
return journalRepository.findByTitleLike(keyword);
}
@Override
public List findByTitleCustom(String keyword) {
return journalRepository.findByTitleCustom(keyword);
}
@Override
public Page findAll(Integer pageIndex, Integer pageSize) {
Page page = journalRepository.findAll(PageRequest.of(pageIndex, pageSize));
return page;
}
}
4.控制层
package com.yl.controller;
import com.alibaba.fastjson.JSONObject;
import com.yl.repository.JournalRepository;
import com.yl.common.lang.Result;
import com.yl.entity.BlogModel;
import com.yl.entity.Journal;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/journal")
public class JournalController {
@Autowired
private JournalService journalService;
@GetMapping("/add")
public Result add(){
Journal journal = new Journal();
journal.setUrl("htttp://baidu.com");
journal.setCreatedAt(LocalDateTime.now());
journal.setTitle(" 文章与专著 2021-12-10 15:54 GB/T 14467—2021《中国植物分类与代码》国家标准正式出版发行");
journal.setTitleDesc("中华人民共和国");
return Result.succ(journalService.save(journal));
}
@GetMapping("/findByName")
public Result findByName(String title){
List list = new ArrayList<>();
MatchQueryBuilder matchQueryBuilder = new
MatchQueryBuilder("title",title);
return Result.succ( journalService.search(matchQueryBuilder));
}
@PostMapping("/page")
public Result page(@RequestBody JSonObject param){
return Result.succ(journalService.pageQuery(param));
}
@GetMapping("/get/{id}")
public Result getById(@PathVariable String id) {
if (StringUtils.isEmpty(id))
return Result.fail("id为null");
Optional blogModelOptional = journalService.findById(id);
if (blogModelOptional.isPresent()) {
Journal blogModel = blogModelOptional.get();
return Result.succ(blogModel);
}
return Result.fail("未查询到相关数据");
}
@GetMapping("/findAll")
public Result findAll() {
Iterable iterable = journalService.findAll();
List list = new ArrayList<>();
iterable.forEach(list::add);
return Result.succ(list);
}
@PostMapping("/updateById")
public Result updateById(@RequestBody Journal journal) {
String id = journal.getId();
if (StringUtils.isEmpty(id)) {
return Result.fail("");
}
return Result.succ(journalService.save(journal));
}
@GetMapping("/deleteById/{id}")
public Result deleteById(@PathVariable String id) {
if (StringUtils.isEmpty(id)) {
return Result.fail("id为null");
}
journalService.deleteById(id);
return Result.succ("删除成功");
}
}
注意:指定数据类型就在bean对象对应字段添加类型限定注解@Field(type = FieldType.Long)
添加的数据
二、查看Elasticsearch中添加的索引数据
1查看添加的索引数据
打开折叠框,选择Stack_management
2.点击Index Patterns,然后选择Create Index Patterns 3.输入你需要看的索引名字,点击Create Index Pattern 4.点击折叠框,选DisCover 5.选择这个折叠框就可以自由切换了 三、删除索引 1. 打开折叠框,选择Stack_management 2.选中Save Objects,x选中要删除的索引名,删除欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)