springboot整合elasticsearch实现简单增删改查(1)

本文只写增删改,关于查询有点复杂,会在另一篇文章详细概述

springboot是个好东西,啧啧

首先引入依赖

<!-- elasticsearch -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>

然后再造个实体类

package com.study.elasticsearch;

import java.io.Serializable;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "data", type = "table")
//indexName索引名称 可以理解为数据库名 必须为小写 不然会报org.elasticsearch.indices.InvalidIndexNameException异常
//type类型 可以理解为表名
public class Domain implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id // 主键,注意这个搜索是id类型是string,与我们常用的不同
	private String id; // @Id注解加上后,在Elasticsearch里相应于该列就是主键了,在查询时就可以直接用主键查询
	private String title;
	private String createTime;
	private String text;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getCreateTime() {
		return createTime;
	}

	public void setCreateTime(String createTime) {
		this.createTime = createTime;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	/**
	 * 
	 * @param id
	 * @param title
	 * @param createTime
	 * @param text
	 */
	public Domain(String id, String title, String createTime, String text) {
		super();
		this.id = id;
		this.title = title;
		this.createTime = createTime;
		this.text = text;
	}
//不写构造函数查询会报错
	Domain() {
	}
}

这里说下实体类上的几个注解

@Document注解里面的几个属性,类比mysql的话是这样:
indexName –> 索引库的名称,建议以项目的名称命名,就相当于数据库DB
type –> 类型,建议以实体的名称命名Table ,就相当于数据库中的表table
Document –> row 就相当于某一个具体对象

String indexName();//索引库的名称,建议以项目的名称命名
 
String type() default "";//类型,建议以实体的名称命名
 
short shards() default 5;//默认分区数
 
short replicas() default 1;//每个分区默认的备份数
 
String refreshInterval() default "1s";//刷新间隔
 
String indexStoreType() default "fs";//索引文件存储类型

@Id注解

在Elasticsearch里相应于该列就是主键了,在查询时就可以直接用主键查询

@Field注解

 
public @interface Field {
 
FieldType type() default FieldType.Auto;#自动检测属性的类型
 
FieldIndex index() default FieldIndex.analyzed;#默认情况下分词
 
DateFormat format() default DateFormat.none;
 
String pattern() default "";
 
boolean store() default false;#默认情况下不存储原文
 
String searchAnalyzer() default "";#指定字段搜索时使用的分词器
 
String indexAnalyzer() default "";#指定字段建立索引时指定的分词器
 
String[] ignoreFields() default {};#如果某个字段需要被忽略
 
boolean includeInParent() default false;
}

配置文件

#es的默认名称,如果安装es时没有做特殊的操作名字都是此名称,分布式多节点用逗号分隔
spring.data.elasticsearch.cluster-name=elasticsearch
# Elasticsearch 集群节点服务地址,用逗号分隔,如果没有指定其他就启动一个客户端节点,默认java访问端口9300
spring.data.elasticsearch.cluster-nodes=localhost:9300
# 设置连接超时时间
spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s

springboot 为ES封装了一套jpa的操作

package com.study.elasticsearch;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface EsRepository extends ElasticsearchRepository<Domain,String> {
	
}

下面就是spring一贯作风了,jpa调用

package com.study.elasticsearch;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.study.utils.Date;

@RestController
public class EsController {

	@Autowired
	private EsRepository esRepository;
	//新增
	@GetMapping("save")
	public Domain save(String txt) {
		Domain Info = new Domain(Date.getDateyyyyMMdd(), "testTitle", Date.getDateyyyy_MM_dd(), txt);
		Domain save = esRepository.save(Info);
		return save;
	}
//根据id删除
	@GetMapping("delete")
	public String delete(String id) {
		esRepository.deleteById(id);
		return "success";
	}
//这其实就是个新增,只不过同一个id会覆盖
	@GetMapping("update")
	public Domain update(String id, String txt) {
		Domain Info = new Domain(id, "NewTestTitle", Date.getDateyyyy_MM_dd(), txt);
		Domain save = esRepository.save(Info);
		return save;
	}
}

启动ES,然后再浏览器get访问,增加数据

有个谷歌浏览器的插件很好用可以试一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值