一、Elasticserch下载
https://www.elastic.co官网下载,我下载的版本是2.4.4。
高版本可能不兼容spring.data.elasticsearch.
二、springboot实现
(1)引入pom.xml依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
(2)在application.properties中加入
#Elasticserch
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s
(3)document类
@Data
@Document(indexName="blog", type="blog")
public class EsBlog implements Serializable {
@Id
private Integer id;
@Field(index = FieldIndex.not_analyzed)
private Integer blogId;
private String content;
@Field(index = FieldIndex.not_analyzed)
private String createTime;
private String category;
private String title;
@Field(index = FieldIndex.not_analyzed)
private String createUser;
@Field(index = FieldIndex.not_analyzed)
private Integer views;
protected EsBlog() {
}
public EsBlog(Blog blog){
this.blogId = blog.getId();
this.category = blog.getCategory();
this.content = blog.getContent();
this.createTime = blog.getCreateTime();
this.createUser = blog.getCreateUser();
this.title = blog.getTitle();
this.views = blog.getViews();
}
}
(4)BlogElasticsearchRepository类
public interface BlogElasticsearchRepository extends ElasticsearchRepository<EsBlog,Integer> {
/**
*
* 模糊查询
* @param content 正文
* @param title 标题
* @param category 分类
* @param pageable 分页
* @return Page
*/
Page<EsBlog> findDistinctByContentContainingOrTitleContainingOrCategoryContaining(String content, String title,String category, Pageable pageable);
/**
* deleteByBlogId
* @param id id
*/
@Modifying
void deleteByBlogId(Integer id);
}
(5)增删改(增改是一个方法)
@Override
public void save(Blog blog) {
articleDao.save(blog);
repository.save(new EsBlog(blog));
}
@Override
public void delete(Integer id) {
articleDao.deleteById(id);
repository.deleteByBlogId(id);
}
(6)全文检索
@Override
public List<Blog> search(String search, Integer page) {
Sort sort=new Sort(Sort.Direction.DESC,"createTime");
Pageable pageable = new PageRequest(page, 10, sort);
List<EsBlog> esBlogs = repository.findDistinctByContentContainingOrTitleContainingOrCategoryContaining(search, search, search, pageable).getContent();
List<Blog> blogs = new ArrayList<>(50);
for (EsBlog esBlog : esBlogs){
Blog blog = new Blog(esBlog);
blogs.add(blog);
}
return blogs;
}