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訪問,增加數據

有個谷歌瀏覽器的插件很好用可以試一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章