elasticsearch实体类⽇期类型_SpringBoot2.x系列教程55--
Spr。。。
SpringBoot2.x系列教程55--NoSQL之SpringBoot整合ElasticSearch⽅式⼆
作者:⼀⼀哥
在上⼀节中,我带⼤家学习了在Spring Boot中整合Elastic Search的第⼀种⽅式,这种⽅式是直接利⽤TransportClient实现增删改查,有点⿇烦。接下来我带⼤家利⽤ElasticSearchRepository实现第2种⽅式的增删改查。
⼀. Spring Boot整合Elastic Search
1. 创建web项⽬
我们按照之前的经验,创建⼀个web程序,并将之改造成Spring Boot项⽬,具体过程略。
2. 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
注意:因为我的elastic search 并不是6.5.x以上的最新版本,⽽是5.6.8版本,所以我这⾥使⽤的还是spring-boot-starter-data-elasticsearch的依赖包。
3. 创建l⽂件
# Elasticsearch cluster name.
spring:
data:
elasticsearch:
cluster-name: elasticsearch
# Comma-separated list of cluster node addresses.
cluster-nodes: localhost:9300
# Whether to enable Elasticsearch repositories.
repositories:
enabled: true
4. 创建Book实体类
ity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
/**
*Document:
* indexName = "book":索引名称,类似于mysql中的数据库;
* type = "doc":⽂档类型,类似于mysql中的表;
* shards = 5:分⽚数量
* replicas = 1:副本
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "book", type = "doc", shards = 5, replicas = 1)
public class Book {
@Id
private String id;
/**
* 中⽂分词设置,前提是您的es已经安装了中⽂分词ik插件
* 中⽂分词有两种形式:
* ik_max_word:会将⽂本做最细粒度的拆分
* ik_smart:会将⽂本做最粗粒度的拆分
*/
@Field(type = FieldType.Text, analyzer = "ik_max_word",searchAnalyzer ="ik_max_word")    private String title;
private String author;
private String postDate;
}
5. 创建Repository仓库类
pository;
ity.Book;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.pository.ElasticsearchRepository;
public interface BookRepository extends ElasticsearchRepository<Book, String> {
//Optional<Book> findById(String id);
Page<Book> findByAuthor(String author, Pageable pageable);
}
6. 定义Service及其实现类
BookService接⼝
boot.service;
ity.Book;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.util.List;
springboot中文
import java.util.Optional;
public interface BookService {
Optional<Book> findById(String id);
Book save(Book blog);
void delete(Book blog);
Optional<Book> findOne(String id);
List<Book> findAll();
Page<Book> findByAuthor(String author, PageRequest pageRequest); }
BookServiceImpl实现类
boot.service.impl;
ity.Book;
pository.BookRepository;
boot.service.BookService;
slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Slf4j
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookRepository bookRepository;
@Override
public Optional<Book> findById(String id) {
return bookRepository.findById(id);
}
@Override
public Book save(Book blog) {
return bookRepository.save(blog);
}
@Override
public void delete(Book blog) {
bookRepository.delete(blog);
}
@Override
public Optional<Book> findOne(String id) {
return bookRepository.findById(id);
}
@Override
public List<Book> findAll() {
return (List<Book>) bookRepository.findAll();
}
@Override
public Page<Book> findByAuthor(String author, PageRequest pageRequest) {        return bookRepository.findByAuthor(author, pageRequest);
}
}
7. 创建BookController接⼝