目录
1、简介
springboot整合ElasticSearch分为两种,一种直接使用官方的集成工具(spring-boot-starter-data-elasticsearch),但是这种要求项目springboot版本是在2.0.0以上,如果项目使用的版本达不到这个版本,还是自己使用。
另一种是自己写Client连接(请关注下一篇)。
2、pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--ElasticSearch依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.实体类
这里的indexName是索引名,Document对应到数据库中也就是数据库的意思
type是类型,对应到数据库中也就是表的意思
@ID,是主键的标识
package com.example.elatiscsearch;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import java.util.Date;
/**
* @program: elatiscsearch
* @description: msg
* @author: Irving Wei
* @create: 2018-12-04 14:30
**/
@Document(indexName = "message_system1",type = "msg_detail")
public class Message {
@Id
private int id;
private String content;
private String rec;
private Date sendTime;
public Message() {
}
public Message(int id, String content, String rec, Date sendTime) {
this.id = id;
this.content = content;
this.rec = rec;
this.sendTime = sendTime;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getRec() {
return rec;
}
public void setRec(String rec) {
this.rec = rec;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"id\":")
.append(id);
sb.append(",\"content\":\"")
.append(content).append('\"');
sb.append(",\"rec\":\"")
.append(rec).append('\"');
sb.append(",\"sendTime\":\"")
.append(sendTime).append('\"');
sb.append('}');
return sb.toString();
}
}
4.Repository类
这里只做一个小栗子,不写Service层直接操作Repository了
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;
/**
* @program: elatiscsearch
* @description:
* @author: Irving Wei
* @create: 2018-12-04 14:37
**/
@Component
public interface MsgRepository extends ElasticsearchRepository<Message,Integer> {
}
5.测试类
@Test
public void testEs(){
Message m = new Message(3,"content","xin1",new Date());
msgRepository.save(m);
}
@Test
public void testEsFind(){
Message m = msgRepository.findById(1).get();
System.out.println(m);
}
@Test
public void testEsSearch(){
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("content", "content"))
.must(QueryBuilders.termQuery("rec", "xin"))
.mustNot(QueryBuilders.termQuery("rec", "xin1"))
.should(QueryBuilders.termQuery("gender", "male"));
Iterable<Message> searchResult = msgRepository.search(queryBuilder);
Iterator<Message> iterator = searchResult.iterator();
List<Message> list = new ArrayList<Message>();
while (iterator.hasNext()) {
list.add(iterator.next());
}
System.out.println(list);
}