微信公众号:Feature社区
引入依赖
说明:transport-netty4-client依赖是报了netty被占用(貌似是这个异常)的时候需要引入的包,通常redis与es一起使用时会报错,此时需要引入该包,一般情况不需要引入此包
<!-- Spring Boot Elasticsearch 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.2.3</version>
</dependency>
es配置信息
spring:
data:
elasticsearch:
cluster-name: [集群名称]
cluster-nodes: [集群节点1,集群节点2]
repositories:
enabled: true
首先实体类添加注解,指定索引、类型、分片、备份信息
@Data
@Document(indexName = "argus", type = "event", shards = 5, replicas = 1)
public class Event implements Serializable {
@Id
private Integer id;
private Integer type;
private Integer level;
private Integer projectName;
private String instanceId;
private Integer projectType;
private String instanceName;
private Date eventTime;
private String message;
private Date gmtCreate;
private Date gmtModified;
}
接着创建一个针对该实体的接口,接口继承ElasticsearchRepository<T,ID>接口,该接口有es的若干方法
@Component
public interface EventRepository extends ElasticsearchRepository<Event, Long> {
}
es继承关系图谱
写个测试类
@Test
public void esSaveTest() {
Event event = new Event() {
{
Date date = new Date(Date.from(LocalDateTime.now().toInstant(ZoneOffset.of("+8"))).getTime());
setId(1);
setType(0);
setLevel(4);
setProjectName(1);
setInstanceId("1");
setProjectType(1);
setInstanceName("测试project");
setEventTime(date);
setMessage("测试message");
setGmtCreate(date);
setGmtModified(date);
}};
Event save = eventRepository.save(event);
System.out.println(save.toString());
}
kibana查看运行结果
GET argus/_search
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "argus",
"_type": "event",
"_id": "1",
"_score": 1,
"_source": {
"id": 1,
"type": 0,
"level": 4,
"projectName": 1,
"instanceId": "1",
"projectType": 1,
"instanceName": "测试project",
"eventTime": 1578968455089,
"message": "测试message",
"gmtCreate": 1578968455089,
"gmtModified": 1578968455089
}
}
]
}
}
java查询es结果
@Test
public void queryES() {
Optional<Event> byId = eventRepository.findById(1L);
Event event = byId.get();
System.out.println(event.toString());
}
Console结果
Event(id=1, type=0, level=4, projectName=1, instanceId=1, projectType=1, instanceName=测试project, eventTime=2020-01-14, message=测试message, gmtCreate=2020-01-14, gmtModified=2020-01-14)
批量保存
@Test
public void esTest1() {
List<Event> eventList = new ArrayList<>();
for (int i = 1; i <= 30; i++) {
Integer id = i;
Event event = new Event() {
{
Date date = new Date(Date.from(LocalDateTime.now().toInstant(ZoneOffset.of("+8"))).getTime());
setId(id);
setType(0);
setLevel(4);
setProjectName(id);
setInstanceId("1");
setProjectType(1);
setInstanceName("测试project" + id);
setEventTime(date);
setMessage("测试message" + id);
setGmtCreate(date);
setGmtModified(date);
}};
eventList.add(event);
}
Iterable<Event> events = eventRepository.saveAll(eventList);
}
kibana获取查询结果
GET argus/_search
total有29条
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 29,
"max_score": 1,
"hits": [
{
"_index": "argus",
"_type": "event",
"_id": "14",
"_score": 1,
"_source": {
"id": 14,
"type": 0,
"level": 4,
"projectName": 14,
"instanceId": "1",
"projectType": 1,
"instanceName": "测试project14",
"eventTime": 1578986293526,
"message": "测试message14",
"gmtCreate": 1578986293526,
"gmtModified": 1578986293526
}
},
{
"_index": "argus",
"_type": "event",
"_id": "19",
"_score": 1,
"_source": {
"id": 19,
"type": 0,
"level": 4,
...
...
java查询
范围查询
@Test
public void queryES() {
//创建查询体
BoolQueryBuilder builder = QueryBuilders.boolQuery();
//设置聚合条件(查询id为4-10不包括4包括10)
RangeQueryBuilder query = QueryBuilders
.rangeQuery("id")
.from(4) //从4开始
.to(10) //到10结束
.includeLower(false) //不包括下界
.includeUpper(true); //包括上界
//将聚合条件设置入查询体中
builder.must(query);
//进行查询
Iterable<Event> search = eventRepository.search(builder);
search.forEach(item -> {
System.out.pr