ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot集成ElasticSearch

2022-06-30 19:02:45  阅读:141  来源: 互联网

标签:集成 index SpringBoot void client 文档 new public 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);
}

标签:集成,index,SpringBoot,void,client,文档,new,public,ElasticSearch
来源: https://www.cnblogs.com/Huyi-1208/p/16428075.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有