springboot使用es入门(6.3.2版本)
使用前先对照springboot和es和spring-data之间的版本关系
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions
springboot使用es
es有两个端口可以用9200和9300(TCP端口后期es官方弃用),这里整合就使用9200了。
这里工具类采用es官方提供的.使用Java High Level REST Client
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>6.3.2</version>
</dependency>
es的启动类配置
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-getting-started-initialization.html
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"),new HttpHost("localhost", 9201, "http")));
配置java bean
package com.fchan.espractice.config;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticSearchConfig {@Beanpublic RestHighLevelClient restHighLevelClient() {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9222, "http")));return client;}}
增删改查demo
package com.fchan.espractice;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fchan.espractice.pojo.User;
import org.apache.http.Header;
import org.apache.http.message.BasicHeader;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.*;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.StringUtils;import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;@SpringBootTest
class EsPracticeApplicationTests {@Autowiredprivate RestHighLevelClient restHighLevelClient;@Autowiredprivate ObjectMapper objectMapper;//测试创建索引@Testpublic void testCreateIndex() throws IOException {//创建索引请求CreateIndexRequest indexRequest = new CreateIndexRequest("fchan_test");//执行创建请求 IndicesClientHeader header = new BasicHeader("Content-Type", "application/json");CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(indexRequest, header);System.out.println(objectMapper.writeValueAsString(createIndexResponse));}//测试索引是否存在@Testpublic void testExistindex() throws IOException {GetIndexRequest request = new GetIndexRequest();request.indices("fchan_test");//执行创建请求 IndicesClientHeader header = new BasicHeader("Content-Type", "application/json");boolean exists = restHighLevelClient.indices().exists(request, header);System.out.println(exists);}//测试删除索引@Testpublic void testDeleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("fchan_test");//执行创建请求 IndicesClientHeader header = new BasicHeader("Content-Type", "application/json");DeleteIndexResponse delete = restHighLevelClient.indices().delete(request, header);System.out.println(objectMapper.writeValueAsString(delete));}//测试添加文档@Testpublic void testAddDocument() throws JsonProcessingException {User user = new User("张11", 3, "aaa");//请求要操作的索引库IndexRequest request = new IndexRequest("fchan_test");//设置请求的规则 put /fchan_test/_doc/1request.id("1");request.timeout(TimeValue.timeValueSeconds(1));request.type("user_2");//将数据放入请求request.source(objectMapper.writeValueAsString(user), XContentType.JSON);try {//发送请求获取响应结果Header header = new BasicHeader("Content-Type", "application/json");IndexResponse index = restHighLevelClient.index(request, header);System.out.println(objectMapper.writeValueAsString(index));} catch (IOException e) {e.printStackTrace();}}//查询文档是否存在@Testpublic void testGetIndex() throws IOException {GetRequest request = new GetRequest("fchan_test", "user", "1");//是否返回 _sourcerequest.fetchSourceContext(new FetchSourceContext(false));//可以指定返回的字段, 即 select xx,xx,xx from xx_table//request.storedFields("_none_");Header header = new BasicHeader("Content-Type", "application/json");boolean exists = restHighLevelClient.exists(request, header);System.out.println(exists);}//查询文档@Testpublic void testQueryDocument() throws IOException {GetRequest request = new GetRequest("fchan_test", "user", "1");Header header = new BasicHeader("Content-Type", "application/json");GetResponse documentFields = restHighLevelClient.get(request, header);System.out.println(objectMapper.writeValueAsString(documentFields));}//更新文档@Testpublic void testUpdateDocument() throws IOException {UpdateRequest request = new UpdateRequest("fchan_test", "user", "1");request.timeout("1s");User user = new User("张3333", 33, "11");request.doc(objectMapper.writeValueAsString(user), XContentType.JSON);Header header = new BasicHeader("Content-Type", "application/json");UpdateResponse update = restHighLevelClient.update(request, header);System.out.println(objectMapper.writeValueAsString(update));}//删除文档@Testpublic void testDeleteDocument() throws IOException {DeleteRequest request = new DeleteRequest("fchan_test", "user", "1");request.timeout(TimeValue.timeValueMillis(1));Header header = new BasicHeader("Content-Type", "application/json");DeleteResponse delete = restHighLevelClient.delete(request, header);System.out.println(objectMapper.writeValueAsString(delete));}//批量新增@Testpublic void testBatchAddDocument() throws IOException {BulkRequest bulkRequest = new BulkRequest();for (int i = 0; i < 10; i++) {//如果存在id一样的数据,那么此次批量新增的时候会冲掉之前的数据,新增的时候有些字段没给值,那么会将这些字段的值冲掉->nullIndexRequest request = new IndexRequest("fchan_test", "user");//这里不给id的话,es会自己给一个随机idrequest.id("" + (i + 1));request.source(objectMapper.writeValueAsString(new User("陈" + (i + 1), i + 1)), XContentType.JSON);bulkRequest.add(request);}BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, new BasicHeader("Content-Type", "application/json"));//是否失败 false代表成功,因为这个方法是 hasFailures 就是问有没有失败的,没有失败的那就是false啊System.out.println(bulk.hasFailures());//全部的返回结果System.out.println(objectMapper.writeValueAsString(bulk));}//带条件查询@Testpublic void testQuery() throws IOException {SearchRequest searchRequest = new SearchRequest("fchan_test");//构建查询条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//高亮//searchSourceBuilder.highlighter()//精确匹配//TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "张5");//通配符查询,效率比较低WildcardQueryBuilder wildcardQuery = QueryBuilders.wildcardQuery("name.keyword", "*张5*");//匹配所有//MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();//searchSourceBuilder.query(termQueryBuilder);searchSourceBuilder.query(wildcardQuery);searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));searchRequest.source(searchSourceBuilder);Header header = new BasicHeader("Content-Type", "application/json");SearchResponse search = restHighLevelClient.search(searchRequest, header);System.out.println(objectMapper.writeValueAsString(search));System.out.println("======================================");for (SearchHit hit : search.getHits().getHits()) {System.out.println(hit.getSourceAsMap());}}//批量删除,这里采用先查询出id,再批量删除@Testpublic void testBatchDeleteDocument() throws IOException {SearchRequest searchRequest = new SearchRequest("fchan_test");searchRequest.types("user");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.timeout(TimeValue.MINUS_ONE);MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "张");searchSourceBuilder.query(matchQueryBuilder);searchRequest.source(searchSourceBuilder);Header header = new BasicHeader("Content-Type", "application/json");SearchResponse search = restHighLevelClient.search(searchRequest, header);BulkRequest bulkRequest = new BulkRequest();for (SearchHit hit : search.getHits().getHits()) {DeleteRequest request = new DeleteRequest("fchan_test");request.type("user");request.id(hit.getId());bulkRequest.add(request);}BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, header);System.out.println(objectMapper.writeValueAsString(bulk));}}
springboot使用es入门(6.3.2版本)相关推荐
- SpringBoot集成Es使用ElasticSearchTemplate7.x版本自动注入失败解决
SpringBoot集成Es使用ElasticSearchTemplate7.x版本自动注入失败解决 错误: Caused by: org.springframework.beans.factory. ...
- ES入门学习:ElasticSearch、Kibana、ik分词器的安装、简单使用及SpringBoot集成
前言 es是采用Java语言开发,因此,想要安装运行es需要提前准备好jdk环境,关于linux配置jdk在前文linux配置jdk 本文主要介绍es的安装.kibana的安装和简单使用及ik分词器的 ...
- SpringBoot 操作 ES 进行各种高级查询
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...
- OpenGL ES入门(使用指南)
转载地址:https://www.ict528.com/wpozv3sz3srrtywpoq1qvuyqooqxz1usvwr2uqoo.html. OpenGL ES 入门 一.前言 OpenGL ...
- Java使用Springboot集成Es官方推荐(RestHighLevelClient)
SpringBoot集成ElasticSearch的四种方式(主要讲解ES官方推荐方式) TransportClient:这种方式即将弃用 官方将在8.0版本彻底去除 Data-Es:Spring提供 ...
- OpenGL ES入门详解
http://blog.csdn.net/wangyuchun_799/article/details/7736928 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.决定你要支持的Ope ...
- SpringBoot (一) :入门篇
SpringBoot (一) :入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使 ...
- 详细SpringBoot教程之入门(一)
写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...
- SpringBoot 集成 ES 7.6.2 并对字段进行中文和拼音分词处理
前言 在最近做的流媒体项目中需要集成 ES 搜索引擎,目前 ES 最新版本为 7.x 版本,在以往的项目中我都采用的是 spring 集成的 spring-data-es, 使用自定义类集成 elas ...
最新文章
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- 谈谈Koa 中的next
- python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价...
- python输入文字、成为字典_Python 字典(Dictionary)操作详解
- 【Python】编程笔记10
- 透明(颜色)渐变背景(颜色透明背景),兼容IE8
- arduino tft 方向_ESP32在Arduino环境下玩转 LVGL,ESP32移植LVGL详细教程
- Kernel Samepage Merging | 同页合并
- 物联网卡在建筑行业的应用结果
- 只能选择GridView中的一个CheckBox(单选CheckBox)
- 中石油企业微信私有版设置服务器,企业微信授权配置教程
- 抽象代数学习笔记三《群:对称性变换与对称性群》
- python获取中文字体点阵坐标_中文点阵字库的python自动生成程序
- OpenStack DVR 原理深入分析
- 【调剂】齐齐哈尔大学接收调剂研究生
- 查看k8s的etcd数据
- 武松杀潘金莲时为何先扯开其衣服?得知真相才明白武松多么机智!
- c语言字符串怎么退位,C语言第五六次作业.ppt
- 双臂14轴机器人YuMi
- 1005【顺序结构】马克与爸爸的年龄问题