一.环境搭建
1.创建工程
2.导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
编写配置文件:
3.编写持久类
@Document(indexName = "blog2",type = "article")
public class Article implements Serializable {
@Id
private Long id;
private String title;
private String content;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
二.代码实现
service接口
public interface ArticleService {
void save(Article article);
Iterable<Article> findAll();
Optional<Article> findOne(Long id);
void updateArticle(Article article);
void delArticle(Article article);
//分页查询
Page<Article> searchPage(Pageable pageable);
//条件查询+分页
List<Article> findByTitle(String title, Pageable pageable);
//多条件查询+分页
List<Article> findByTitleAndContent(String title,String content,Pageable pageable);
}
service实现类
@Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleDao articleDao;
@Override
public void save(Article article) {
articleDao.save(article);
}
@Override
public Iterable<Article> findAll() {
return articleDao.findAll();
}
@Override
public Optional<Article> findOne(Long id) {
return articleDao.findById(id);
}
@Override
public void updateArticle(Article article) {
articleDao.save(article);
}
@Override
public void delArticle(Article article) {
articleDao.delete(article);
}
@Override
public Page<Article> searchPage(Pageable pageable) {
return articleDao.findAll(pageable);
}
@Override
public List<Article> findByTitle(String title,Pageable pageable) {
return articleDao.findByTitle(title,pageable);
}
@Override
public List<Article> findByTitleAndContent(String title, String content, Pageable pageable) {
return articleDao.findByTitleAndContent(title,content,pageable);
}
dao接口
public interface ArticleDao extends ElasticsearchCrudRepository<Article,Long> {
List<Article> findByTitle(String title, Pageable pageable);
List<Article> findByTitleAndContent(String title, String content, Pageable pageable);
}
测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SpringBootRun.class)
public class testDemo {
@Autowired
private ArticleService articleService;
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Test
public void add(){
Article article = new Article();
article.setId(101L);
article.setTitle("100是一个基于Lucene的搜索服务修改后");
article.setContent("100Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎修改后");
articleService.save(article);
}
@Test
public void findAll(){
Iterable<Article> all = articleService.findAll();
for (Article article : all) {
System.out.println(article.getContent());
}
}
@Test
public void findOne(){
Optional<Article> one = articleService.findOne(100L);
String content = one.get().getContent();
System.out.println(content);
}
@Test
public void update(){
Article article = new Article();
article.setId(100L);
article.setTitle("elasticSearch 3.0版本发布...更新");
article.setContent("ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的\n" +
"全文搜索引擎,基于RESTful web接口");
articleService.save(article);
}
@Test
public void delete(){
Article article = new Article();
article.setId(101L);
articleService.delArticle(article);
}
//分页查询+排序
@Test
public void searchByPage(){
Pageable pageable = PageRequest.of(0,5,Sort.by(Sort.Order.desc("id")));
Page<Article> articles = articleService.searchPage(pageable);
for (Article article : articles) {
System.out.println(article.getContent());
}
}
//通过命名查询
@Test
public void searchSort(){
List<Article> articleList = articleService.findByTitle("快乐",PageRequest.of(0 ,5 ,Sort.by(Sort.Order.desc("id"))));
for (Article article : articleList) {
System.out.println(article.getContent());
}
}
//多条件查询
@Test
public void searchBytitleandContent(){
List<Article> byTitleAndContent = articleService.findByTitleAndContent("快乐", "希望", PageRequest.of(0, 10, Sort.by(Sort.Order.desc("id"))));
for (Article article : byTitleAndContent) {
System.out.println(article.getContent());
}
}
}
三.Spring data Elasticsearch常用操作
方法我们已经在上面的代码的最后两个方法中编写了