1、本地安装elasticsearch服务,具体过程见上一篇文章(安装和配置elasticsearch服务集群)

2、修改项目中pom文件,引入搜索相关jar包

  1. <!-- elasticsearch相关jar包开始 -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  5. </dependency>
         <!-- 链接数据库用的jar包 -->
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-jdbc</artifactId>
  9. </dependency>
  10. <!-- elasticsearch相关jar包结束 -->

2、在application.yml文件中添加elasticsearch配置信息

  1. spring:
  2. #elasticsearch配置
    data:
    elasticsearch: #ElasticsearchProperties
    cluster-name: elastic #默认为elasticsearh
    cluster-nodes: 192.168.97.88:9300,192.168.97.88:9301 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode

  

3、编写elasticsearch操作的相关类

(1)、获取elasticsearch客户端

  1. //获取elasticsearch客户端
  2. String hostName = "192.168.97.88" ; //本地elasticsearch的yml配置文件中写的IP地址
  3. Integer port = 9200 ; //远程链接的端口号为9200
  4. RestClient restClient = RestClient.builder(new HttpHost(hostName, port)).build();
  5. /*
  6. //如果想要获取阿里云上的elasticsearch客户端,代码如下
  7. final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
  8. credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("阿里云elasticsearch用户名", "阿里云elasticsearch密码"));
  9. RestClient restClient = RestClient.builder(new HttpHost("阿里云elasticsearch的ip", 9200))
  10.         .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
  11.         @Override
  12.         public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
  13.       return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
  14.        }
  15.         }).setMaxRetryTimeoutMillis(5 * 60 * 1000) //设置超时时间
  16.       .build();
  17. */

  

(2)、查看索引是否存在 (索引必须为全小写)

  1. //查看 demoIndex 索引是否存在
  2. Response isExist = restClient.performRequest("HEAD","/demoindex" , Collections.<String, String>emptyMap());
  3. System.out.println(isExist.getStatusLine().getStatusCode());

(3)、索引不存在,创建索引

  1. //查看 demoIndex 索引是否存在
  2. Response isExist = restClient.performRequest("HEAD","/demoindex" , Collections.<String, String>emptyMap());
  3. int status = isExist.getStatusLine().getStatusCode();
  4. if( status == 404){
  5. //不存在索引,创建索引
  6. String method = "PUT";
  7. String endpoint = "demoindex";
  8. Response response = restClient.performRequest(method, "/" + endpoint);
  9. System.out.println(EntityUtils.toString(response.getEntity()));
  10. }

(4)、索引已经创建存在,我们接下来进行索引的  增删改查  操作

①、新增索引数据

  1. //手动拼写一个符合要求的json串 json串的格式为:{"field1":"value1","field2":"value2"}
  2. String json = "{" +
  3. "\"user\":\"kimchy\"," +
  4. "\"postDate\":\"2013-01-30\"," +
  5. "\"message\":\"trying out Elasticsearch\"" +
  6. "}";
  7. HttpEntity entity = new NStringEntity(json, ContentType.APPLICATION_JSON);
  8. //发送一个请求,将json转换的实体发送到es,并常见索引,索引主键id=1
  9. Response indexResponse = restClient.performRequest(
  10. "PUT",
  11. "/" + "demoindex" + "/" + "demoindex" + "/1",
  12. Collections.<String, String>emptyMap(),
  13. entity);
  14. //获取结果中的实体,查看是否新增成功
  15. System.out.println(EntityUtils.toString(indexResponse.getEntity()));

  得到如下结果图,表示成功

  

②、批量新增索引数据 ( bulk )

  1. //批量添加索引数据
  2. //手动拼写一个符合要求的json串
  3. // json串的格式为:
  4. // { "index" : { "_id" : "1" }} //这里为手动赋值id,也可以{ "index" : { }}为es自动设置id id相同时后添加的数据会覆盖之前添加的数据
  5. // {"field1":"value1","field2":"value2"}
  6. // { "index" : { "_id" : "2" }}
  7. // {"field1":"value1","field2":"value2"}
  8. String json = "{ \"index\" : { \"_id\" : \"1\" }} \n" +
  9. "{" +
  10. "\"user\":\"kimchy1\"," +
  11. "\"postDate\":\"2013-01-30\"," +
  12. "\"message\":\"trying out Elasticsearch1\"" +
  13. "} \n"; //一定要加换行
  14. json += "{ \"index\" : { \"_id\" : \"2\" }} \n" +
  15. "{" +
  16. "\"user\":\"kimchy2\"," +
  17. "\"postDate\":\"2014-01-30\"," +
  18. "\"message\":\"trying out Elasticsearch2\"" +
  19. "}";
  20. //将字符串转换成http实体
  21. HttpEntity entity = new NStringEntity(json,ContentType.APPLICATION_JSON);
  22. //发送请求,并的到处理结果
  23. Response response = restClient.performRequest("POST","/demoindex/demoindex/_bulk",Collections.singletonMap("pretty","true"),entity);
  24. //获取结果中的实体,查看是否新增成功
  25. System.out.println(EntityUtils.toString(response.getEntity()));

  得到如下结果图,则表示批量插入成功;若红框裱起来的位置为update表示修改成功

  

③、修改单个索引时去执行插入单个索引,将主键id设置为需要更改的索引id即可

④、删除指定索引

  1. //删除指定id索引
  2. Response deleteResponse = restClient.performRequest(
  3. "DELETE",
  4. "/demoindex/demoindex/3", //删除id为 3 的索引
  5. Collections.<String, String>emptyMap());
  6. System.out.println(EntityUtils.toString(deleteResponse.getEntity()));

  得到如下结果,表示删除成功

  ⑤、根据属性来删除对应索引

  1. //根据属性值来删除索引
  2. //删除user="kimchy2"的索引
  3. String queryString = "{\n" +
  4. " \"query\": {\n" +
  5. "\"match_phrase\": {\"user\": \"kimchy2\"}\n" +
  6. "}\n" +
  7. "}\n";
  8. HttpEntity entity = new NStringEntity(queryString, ContentType.APPLICATION_JSON);
  9. Response deleteResponse = restClient.performRequest(
  10. "POST",
  11. "/demoindex/demoindex/_delete_by_query",
  12. Collections.<String, String>emptyMap(),entity);
  13. System.out.println((EntityUtils.toString(deleteResponse.getEntity())));

  得到如下结果图表示删除成功

  ⑥、删除所有索引数据

  1. //删除所有索引数据
  2. String queryString = "";
  3. queryString = "{\n" +
  4. " \"query\": {\n" +
  5. "\"match_all\": {}\n" +
  6. "}\n" +
  7. "}\n";
  8. HttpEntity entity = new NStringEntity(queryString, ContentType.APPLICATION_JSON);
  9. Response deleteResponse = restClient.performRequest(
  10. "POST",
  11. "/demoindex/demoindex/_delete_by_query",
  12. Collections.<String, String>emptyMap(),entity);
  13. System.out.println(EntityUtils.toString(deleteResponse.getEntity()));

  ⑦、搜索索引中的数据

  1. //查询索引数据
  2. String queryStr = "{ \n" +
  3. "\"query\" : { \n" +
  4. "\"match_phrase\": { \"user\": { \"query\" : \"kimchy1\", \"boost\" :\"5\" }}}\n" +
  5. "}\n" +
  6. "}";
  7. HttpEntity entity = new NStringEntity(queryStr, ContentType.APPLICATION_JSON);
  8. Response response = restClient.performRequest("GET", "/demoindex/demoindex/" + "_search",Collections.singletonMap("pretty", "true"),entity);
  9. System.out.println(EntityUtils.toString(response.getEntity()));

  得到查询结果

有关更多查询匹配方式请看下一篇文章

springBoot配置elasticsearch搜索的更多相关文章

  1. kotlin + springboot启用elasticsearch搜索

    参考自: http://how2j.cn/k/search-engine/search-engine-springboot/1791.html?p=78908 工具版本: elasticsearch ...

  2. springboot 配置elasticsearch Java High Rest Client

    前提声明 在新版本的spring boot中逐渐放弃了对Spring Data Elasticsearch的支持,所以不推荐使用,使用ES官方推出的Java High Rest Client. 引入依 ...

  3. 基于Spring-Boot框架的Elasticsearch搜索服务器配置

    一.相关包maven配置 <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-elastic ...

  4. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

  5. springboot集成elasticsearch

    在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用: 在进阶阶段可以需要学习ES的底层原理,如何通过Version来实现乐观锁保证ES不出问题等核心原理: 第 ...

  6. 最新学习springboot 配置注解

    一.概述      Spring Boot设计目的是用来简化新Spring应用的初始搭建以及开发过程.Spring Boot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式. ...

  7. Springboot整合elasticSearch的官方API实例

    前言:在上一篇博客中,我介绍了从零开始安装ElasticSearch,es是可以理解为一个操作数据的中间件,可以把它作为数据的存储仓库来对待,它具备强大的吞吐能力和计算能力,其基于Lucene服务器开 ...

  8. SpringBoot整合ElasticSearch:基于Jest技术

    1.给pom.xml添加依赖 <!--SpringBoot默认使用SpringData ElasticSearch模块进行操作 <dependency> <groupId> ...

  9. 一次 ElasticSearch 搜索优化

    一次 ElasticSearch 搜索优化 1. 环境 ES6.3.2,索引名称 user_v1,5个主分片,每个分片一个副本.分片基本都在11GB左右,GET _cat/shards/user 一共 ...

随机推荐

  1. 在安装Openstack的keystone认证服务时,出现The request you have made requires authentication. (HTTP 401) (Request-ID: req-f94bebba-f0c5-4a92-85问题的处理

      创建openstack的keystone认证服务器报错: The request you have made requires authentication. (HTTP 401) (Reques ...

  2. SQL Server 设置默认数据库

    STEP 1 调用系统函数 查看SQL Server的当前用户名 SELECT SUSER_NAME(); NOTE : 系统函数的调用跟sql语句执行一样 Paste_Image.png 运行结果 ...

  3. 分享一个 Linux 环境下,强力的Python 小工具

    场景 Linux 用户,经常需要在终端查看一些数据,从文件里看 或者网络协议获取数据并查看. 比如,查看文件里的json数据:比如,查看etcd里存下的数据. 如果直接看cat 或者 curl 得到的 ...

  4. IIS应用程序池标识(程序池账户)ApplicationPoolIdentify

    IIS中应用程序池的运行账户(标识)有以下4个选项 LocalService 本地服务 LocalSystem 本地系统 NetWorkService 网络服务 ApplicationPoolIden ...

  5. JDBC教程

    JDBC代表Java与数据库的连接,这对Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API. JDBC库包含的API为每个通常与数据库的使用相关联的任务: 使得连接到数据库 创 ...

  6. PyQt4 在Windows下安装

    快来加入群[python爬虫交流群](群号570070796),发现精彩内容.     首先在网上下载sip文件下载完之后解压, 在Windows的开始菜单栏中进入sip的解压目录下:   在目录下面 ...

  7. window下不用安装虚拟机,也可以玩转linux,玩转最新redis

    想要了解redis的最新特性,可是windows下的可以安装的版本最高为3.2,想要验证redis的诸如stream特性的话,就无能为力了. 解决方法之一在windows上安装虚拟机,然后再虚拟机上安 ...

  8. RocketMQ中NameServer的启动

    在RocketMQ中,使用NamesrvStartup作为启动类 主函数作为其启动的入口: public static void main(String[] args) { main0(args); ...

  9. 夯实Java基础(六)——包装类

    1.包装类简介 我们都知道Java是面向对象编程语言,包含了8种基本数据类型,但是这8种基本数据类型并不支持面向对象的特征,它们既不是类,也不能调用方法.这在实际使用时存在很多的不便,比如int类型需 ...

  10. Button 使用详解

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...