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); }

__EOF__

本文作者一只小狐疑
本文链接https://www.cnblogs.com/Huyi-1208/p/16428075.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   一只小狐疑  阅读(375)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示