es基本用法(六)——整合SpringBoot进行增删改查

微信公众号: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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值