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

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

<!-- elasticsearch相关jar包开始 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
     <!-- 链接数据库用的jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- elasticsearch相关jar包结束 -->

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

spring:
#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客户端

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

  

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

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

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

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

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

①、新增索引数据

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

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

  

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

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

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

  

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

④、删除指定索引

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

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

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

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

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

  ⑥、删除所有索引数据

//删除所有索引数据
String queryString = "";
queryString = "{\n" +
" \"query\": {\n" +
"\"match_all\": {}\n" +
"}\n" +
"}\n";
HttpEntity entity = new NStringEntity(queryString, ContentType.APPLICATION_JSON);
Response deleteResponse = restClient.performRequest(
"POST",
"/demoindex/demoindex/_delete_by_query",
Collections.<String, String>emptyMap(),entity);
System.out.println(EntityUtils.toString(deleteResponse.getEntity()));

  ⑦、搜索索引中的数据

//查询索引数据
String queryStr = "{ \n" +
"\"query\" : { \n" +
"\"match_phrase\": { \"user\": { \"query\" : \"kimchy1\", \"boost\" :\"5\" }}}\n" +
"}\n" +
"}";
HttpEntity entity = new NStringEntity(queryStr, ContentType.APPLICATION_JSON);
Response response = restClient.performRequest("GET", "/demoindex/demoindex/" + "_search",Collections.singletonMap("pretty", "true"),entity);
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. Amdahl定律理解

    其中,a为并行计算部分所占比例,k为并行处理的个数. 当1-a=0时,(没有串行,只有并行)最大加速比s=n: 当a=0时,(只有串行,没有并行)最小加速比s=1: 当k→∞时,s → 1 /(1-a ...

  2. nginx(一)

    localtion的语法 已=开头表示精确匹配 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串. ^~ 开头表示uri以某个常规字符串开头,不是正则匹配 ~ 开头表示区分大小写的正则匹配; ~ ...

  3. Git学习(一):版本控制介绍及安装

    一.VCS(版本控制系统)的演变 1.集中式VCS的特点 1)有集中的版本管理服务器: 2)具备文件版本管理和分支管理能力: 3)集成效率较没有版本控制(如:进行文件夹标注的方式)有明显地的提高: 4 ...

  4. Python学习6——再谈抽象(面对对象编程)

    1.对象魔法 在面对对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法. 使用对象而非全局变量以及函数的原因有多个,而最重要的好处不过以下几点: 多态:可对不同类型的对象 ...

  5. python课堂整理2

    一.字节和编码 1个字节是8位二进制 utf-8 表示一个中文要用3个字节 gbk 为中国汉字发明,2个字节可表示汉字 所以 utf-8 可以读gbk编码,而gbk去读utf-8 的内容会乱码 uni ...

  6. Django的性能优化

    Django的性能优化   一,利用标准数据库优化技术 传统数据库优化技术博大精深,不同的数据库有不同的优化技巧,但重心还是有规则的.在这里算是题外话,挑两点通用的说说: 索引,给关键的字段添加索引, ...

  7. jsp的简介(1)

    一.什么是Java Server Pages? JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%&g ...

  8. D3学习之画布制作

    最近大半个月都和d3斗争,学习艰辛(呜呜……)如果觉得作者写的对你有用,可以打赏作者哦!owo 起言:结合自己的学习之路,我认为要想使用d3画图搞清楚布局很重要,层次分明,就给了你很大的灵活性,写起代 ...

  9. java连接mysql数据库jdbc

    jdbc.driver = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql://localhost:3306/数据库名jdbc.username = rootjd ...

  10. 非web下的PowerMockito单元测试

    一.介绍 PowerMockito 可以用来 Mock 掉 final 方法(变量).静态方法(变量).私有方法(变量).想要使用 PowerMockito Mock掉这些内容,需要在编写的测试类上使 ...