SpringBoot集成ElasticSearch

前言

1.SpringBoot项目导入依赖

<!-- elasticsearch -->
<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>elasticsearch-rest-high-level-client</artifactId>
	<version>7.17.4</version><!--这里的版本要和客户端一致-->
</dependency>
<!-- json -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.79</version>
</dependency>

2.编写ElasticSearchConfig配置类

@Configuration
public class ElasticSearchConfig {
	
	@Bean
	public RestHighLevelClient restHighLevelClient () {
		RestHighLevelClient client = new RestHighLevelClient(
            //这里是elasticsearch客户端的本地网址
			RestClient.builder(new HttpHost("localhost",9200,"http")));
		return client;
	}
}

3.创建索引

@Autowired//注入
@Qualifier("restHighLevelClient")//方法名
private RestHighLevelClient client;

//创建索引
@Test
void contextLoads() throws IOException{
	CreateIndexRequest request = new CreateIndexRequest("huyi_index");//这里是创建的索引名
	CreateIndexResponse createIndexResponse = client.indices().create(request,RequestOptions.DEFAULT);
		System.err.println(createIndexResponse.toString());
	}

4.删除索引

//删除索引
@Test
void delExistIndex() throws IOException{
	DeleteIndexRequest delRequest = new  DeleteIndexRequest("huyi_index");//这里是删除的索引名
	AcknowledgedResponse delet = client.indices().delete(delRequest,RequestOptions.DEFAULT);
		System.err.println(delet);
	}

5.实体类

package com.huyi.demo.pojo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Proxy;

@Entity
@Table(name="DOCUMENT")
@Proxy(lazy=false)
public class Document {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long documentId;
	private	String titles;
	private String contents;
	public long getDocumentId() {
		return documentId;
	}
	public void setDocumentId(long documentId) {
		this.documentId = documentId;
	}
	public String getTitles() {
		return titles;
	}
	public void setTitles(String titles) {
		this.titles = titles;
	}
	public String getContents() {
		return contents;
	}
	public void setContents(String contents) {
		this.contents = contents;
	}
	
	public Document(long documentId, String titles, String contents) {
		
		this.documentId = documentId;
		this.titles = titles;
		this.contents = contents;
	}
	public Document() {
		
	}

}

6.添加文档

  • 单条文档添加
//添加文档
@Test
void testAddDocument() throws IOException {
	//创建请求
	IndexRequest request = new IndexRequest("huyi_index");
    //创建对象,Document是实体类
	Document document = new Document();
	document.setDocumentId(1);
	document.setTitles("hulitest");
	document.setContents("Contents");
	}
	//规则 put /huyi_index/_doc/1
	request.id("Did"+document.getDocumentId());//id
	request.timeout("1s");//超时设置
	//将我们的数据放到请求 json格式
	request.source(JSON.toJSONString(document),XContentType.JSON);
	//客户端发送请求
	IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
	System.err.println(indexResponse.toString());
	System.err.println(indexResponse.status());//对应我们命令的返回状态 :
	
}
  • 多条文档添加,方法1
//添加多条文档
@Test
void testAddDocument() throws IOException {
	//创建对象
	List<Document> documents = new ArrayList<Document>();
	//创建请求
	IndexRequest request = new IndexRequest("huyi_index");
	for(int i=0;i<18;i++) {
		Document document = new Document();
		document.setDocumentId(i+1);
		document.setTitles("hulitest"+(i+1));
		document.setContents("Contents"+i);
		documents.add(document);
	}
	for(Document document:documents) {
		//规则 put /huyi_index/_doc/1
		request.id("Did"+document.getDocumentId());//id
		request.timeout("1s");//超时设置
		//将我们的数据放到请求 json格式
		request.source(JSON.toJSONString(document),XContentType.JSON);
		//客户端发送请求
		IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
		System.err.println(indexResponse.toString());
		System.err.println(indexResponse.status());//对应我们命令的返回状态 :
	}
}
  • 多条文档添加,方法2
//添加多条文档
@Test
void batchAddDocument() throws IOException{
	BulkRequest bulkRequest = new BulkRequest();
	bulkRequest.timeout("10s");//超时设置
	List<Document> documents = new ArrayList<Document>();
	for(int i=19;i<31;i++) {
		Document document = new Document();
		document.setDocumentId(i);
		document.setTitles("titles"+i);
		document.setContents("Content"+i);
		documents.add(document);
	}
	for(Document document:documents) {
		bulkRequest.add(
				new IndexRequest("huyi_index")
				.id("Did"+document.getDocumentId())//不写这个会默认随机生成id
				.source(JSON.toJSONString(document),XContentType.JSON)
				);
	}
	client.bulk(bulkRequest, RequestOptions.DEFAULT);
}

7.读取文档

  • 单条指定读取文档
//读取文档内容
@Test
void getDocument() throws IOException {
	GetRequest getRequest=new GetRequest("huyi_index","1");//索引名,ID
	GetResponse getResponse = client.get(getRequest,RequestOptions.DEFAULT);
	//getResponse.getSource();//获取结果集 是一个map
	//getResponse.getField(null);//获取某一个字段
	//getResponse.getVersion();//获取版本信息	
	System.err.println(getResponse.getSourceAsString());
	}
  • 多条读取文档
	//批量读取数据
	@Test
	void batchDocument() throws IOException{
		SearchRequest searchRequest=new SearchRequest(ESconst.HUYI_INDEX);
		//构建搜索条件
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		/**
		 * .boolQuery()布尔值查询
		 * .fieldMaskingSpanQuery()全匹配查询
		 * .existsQuery()是否存在查询
		 * .matchQuery()匹配查询
		 * .termQuery()精确匹配
		 * .matchAllQuery()查询全部
		 * */   
        //工具类来快速实现
		//TermQueryBuilder termQuery= QueryBuilders.termQuery("contents", "contents0");
		MatchAllQueryBuilder matchAllQuery= QueryBuilders.matchAllQuery();
		/**
		 * highlighter-高亮字段
		 * size、from分页信息
		 * query查询条件
		 * */  
		searchSourceBuilder.query(matchAllQuery);
		//searchSourceBuilder.from();//从第几条开始
		//searchSourceBuilder.size();//一次查询多少条
		searchSourceBuilder.timeout(new TimeValue(10,TimeUnit.SECONDS));
		searchRequest.source(searchSourceBuilder);
		SearchResponse search= client.search(searchRequest,RequestOptions.DEFAULT);
		System.err.println(JSON.toJSONString(search.getHits()));
//		System.out.println("=====================");
//		for(SearchHit hitd:search.getHits().getHits()) {
//			System.err.println(hitd.getSourceAsMap());
//		}

8. 删除文档

//删除文档
@Test
void deletDocument() throws IOException {
	DeleteRequest deleteRequest = new DeleteRequest("huyi_index","1");//索引名字
	deleteRequest.timeout("1s");//超时设置
    //删除
	client.delete(deleteRequest,RequestOptions.DEFAULT);
}

9.更新文档

@Test
void upDocument() throws IOException {
	UpdateRequest updateRequest = new UpdateRequest("huyi_index","1");
	updateRequest.timeout("1s");
    //创建对象
	Document document = new Document();
    //更新内容
	document.setDocumentId(19);
	document.setTitles("huyitest19");
	document.setContents("Content19");
	updateRequest.doc(JSON.toJSONString(document),XContentType.JSON);
    //更新
	UpdateResponse update= client.update(updateRequest,RequestOptions.DEFAULT);
	System.err.println(update.status());
}

10.获取文档 判断是否存在

//获取文档 判断是否存在 get/index/doc/1
@Test
void getIsDocument() throws IOException {
	GetRequest getRequest=new GetRequest("huyi_index","1");
	//不获取返回的Source上下文了
	getRequest.fetchSourceContext(new FetchSourceContext(false));
	//排序的一些字段
	getRequest.storedFields("_none_");
	boolean exists= client.exists(getRequest,RequestOptions.DEFAULT);
	System.err.println(exists);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小狐狸崽子OvO

你的鼓励将是我创造最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值