这是讲数据库的数据导入到es里  所有用到了mysql!

1.依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.thislx</groupId>
<artifactId>springboot-es</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>springboot-es</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--ES6.4.2 start-->
<!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.4.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/transport -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.4.2</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--ES6.4.2 end --> <!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency> <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency> <!--mybatis的依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

2.配置文件

# Elasticsearch
# 9200端口是用来让HTTP REST API来访问ElasticSearch,而9300端口是传输层监听的默认端口
#es地址
elasticsearch.ip=127.0.0.1
#es端口
elasticsearch.port=9300
#连接池数量
elasticsearch.pool=5
#集群名称
elasticsearch.cluster.name=elasticsearch #server.port=8181
#mysql 连接地址与数据库名字
spring.datasource.url=jdbc:mysql:///es
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#帐号
spring.datasource.username=root
#密码
spring.datasource.password=root
#扫描mapper.xml文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
#扫描实体类包
mybatis.type-aliases-package=com.xiaoteng.entity

3.ESConfig

package cn.thislx.springbootes.config;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import java.net.InetAddress; /**
* @Configuration用于定义配置类,可替换xml配置文件
*/
@Configuration
public class ElasticsearchConfig { private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchConfig.class); /**
* elk集群地址
*/
@Value("${elasticsearch.ip}")
private String hostName; /**
* 端口
*/
@Value("${elasticsearch.port}")
private String port; /**
* 集群名称
*/
@Value("${elasticsearch.cluster.name}")
private String clusterName; /**
* 连接池
*/
@Value("${elasticsearch.pool}")
private String poolSize; /**
* Bean name default 函数名字
*
* @return
*/
@Bean(name = "transportClient")
public TransportClient transportClient() {
LOGGER.info("Elasticsearch初始化开始。。。。。");
TransportClient transportClient = null;
try {
// 配置信息
Settings esSetting = Settings.builder()
.put("cluster.name", clusterName) //集群名字
.put("client.transport.sniff", true)//增加嗅探机制,找到ES集群
.put("thread_pool.search.size", Integer.parseInt(poolSize))//增加线程池个数,暂时设为5
.build();
//配置信息Settings自定义
transportClient = new PreBuiltTransportClient(esSetting);
TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port));
transportClient.addTransportAddresses(transportAddress);
} catch (Exception e) {
LOGGER.error("elasticsearch TransportClient create error!!", e);
}
LOGGER.info("Elasticsearch初始化结束。。。。。");
return transportClient;
} }

4.查看集群信息

class test{
@Autowired
private TransportClient client;
@Test
public void test7(){
List<DiscoveryNode> discoveryNodes = client.connectedNodes();
for (DiscoveryNode discoveryNode : discoveryNodes) {
System.out.println("discoveryNode = " + discoveryNode);
}
}
}

5.判断索引是否存在

@Test
public void test8(){
//判断索引是否存在
String index="goods";
IndicesExistsResponse indicesExistsResponse = client.admin().indices()
.exists(new IndicesExistsRequest(index)).actionGet();
boolean exists = indicesExistsResponse.isExists();
System.out.println(exists); }

6.创建索引

	@Test
public void test8(){
//判断索引是否存在
String index="goods";
IndicesExistsResponse indicesExistsResponse = client.admin().indices()
.exists(new IndicesExistsRequest(index)).actionGet();
boolean exists = indicesExistsResponse.isExists();
//如果不存在就创建
if (!exists){
CreateIndexResponse createIndexResponse = client.admin().indices().prepareCreate(index)
.execute().actionGet();
//是否创建成功
boolean acknowledged = createIndexResponse.isAcknowledged();
}
}

7.删除索引

@Test
public void test8(){
//判断索引是否存在
String index="users";
IndicesExistsResponse indicesExistsResponse = client.admin().indices()
.exists(new IndicesExistsRequest(index)).actionGet();
boolean exists = indicesExistsResponse.isExists();
//如果存在就删除
if (exists){
DeleteIndexResponse deleteIndexResponse = client.admin().indices()
.prepareDelete(index).execute().actionGet();
boolean acknowledged = deleteIndexResponse.isAcknowledged();
//true 删除成功
System.out.println("acknowledged = " + acknowledged);
}
}

8.判断索引下的类型是否存在

@Test
public void test8(){
//有此索引的前提下 不然会报错
String index="goods";
//类型
String type="_doc";
//判断索引下type是否存在
boolean exists = client.admin().indices().prepareTypesExists(index).setTypes(type).
execute().actionGet().isExists();
System.out.println(exists);
}

9.往索引添加数据

	@Test //index =users  type=doc
public void test8(){
String index="users";
String type="doc";
//1.对象
EsModel model = new EsModel();
model.setId("2");
model.setName("小明");
model.setAge(20);
model.setDate(new Date());
//讲对象转为json
JSONObject jsonObject= (JSONObject) JSONObject.toJSON(model);
//返回id
IndexResponse indexResponse = client.prepareIndex(index, type,
jsonObject.getString("id"))
.setSource(jsonObject).get();
//拿到id
String id1 = indexResponse.getId();
System.out.println(id1);
//2.jsonObject key:value 形式
JSONObject object=new JSONObject();
object.put("id",UUID.randomUUID().toString().replaceAll("-","").
toUpperCase());
object.put("name","小红");
object.put("age",25);
object.put("date",new Date());
IndexResponse response = client.prepareIndex(index, type,
object.getString("id")).setSource(object).get();
String id = response.getId();
System.out.println("id = " + id);
}

10.通过id获取数据   显示的字段 以及排除字段(不显示)

	@Test //index =users  type=doc
public void test8(){
String index="users";
String type="doc";
//通过id获取数据
GetRequestBuilder getRequestBuilder = client.prepareGet(index, type,
"0DC8ADD7F0184608BB7356441AC8B2A4");
String[] files={"name","age","id"};
//显示的字段和排除的字段 显示可数组可单个字符出
GetResponse documentFields = getRequestBuilder.setFetchSource(files,null).execute().actionGet();
String sourceAsString = documentFields.getSourceAsString();
System.out.println(sourceAsString);
Map<String, Object> source = documentFields.getSource();
System.out.println(source);
}

11.通过id更新数据

 @Test //index =users  type=doc
public void test8() {
String index = "users";
String type = "doc";
String id = "0DC8ADD7F0184608BB7356441AC8B2A4";
JSONObject object = new JSONObject();
object.put("id", id);
object.put("name", "小庄");
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index(index).type(type).id(id).doc(object);
client.update(updateRequest);
}

12.通过id删除数据

 @Test //index =users  type=doc
public void test8() {
String index = "users";
String type = "doc";
String id = "0DC8ADD7F0184608BB7356441AC8B2A4";
DeleteResponse deleteResponse = client.prepareDelete(index, type, id).execute().actionGet();
int status = deleteResponse.status().getStatus();
//200 successful
System.out.println("status = " + status);
}

13.分页查询  显示想显示的字段  排序   没有条件

 @Test
public void test8() {
String index = "goods"; //索引
String type = "_doc"; //类型
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index).setTypes(type);
//要显示的字段
String fields="brandName,price,saleNum,categoryName";
String[] split = fields.split(",");
// 需要显示的字段,逗号分隔(缺省为全部字段)
if (StringUtils.isNotEmpty(fields)) {
//第一个参数 可以数一个字符串 可以是一个数组 第二个参数是排除
searchRequestBuilder.setFetchSource(split, null);
}
//根据 price排序 倒叙
searchRequestBuilder.addSort("price", SortOrder.DESC);
// 分页应用 pageNum=(n-1)*m; pageSize=m; n为当前页,m为显示多少条
searchRequestBuilder.setFrom(1).setSize(11);
SearchResponse searchResponse = searchRequestBuilder.
execute().actionGet();
SearchHits hits = searchResponse.getHits();
//总共查多少条数据
long totalHits = hits.totalHits;
//处理了几条 展示的size 我这里是11条 对应上面11
int length = hits.getHits().length;
System.out.println("totalHits = " + totalHits);
System.out.println("length = " + length);
for (SearchHit hit : hits) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
System.out.println(sourceAsMap);
}
}

14.再加+++

es6.4.2api的更多相关文章

  1. ES6模块import细节

    写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...

  2. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  3. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  4. ES6(块级作用域)

    我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...

  5. es6小白学习笔记(一)

    1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...

  6. ES6之变量常量字符串数值

    ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...

  7. ES6之let命令详解

    let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...

  8. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  9. ES6+ 现在就用系列(二):let 命令

    系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...

随机推荐

  1. java集合总览

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  2. 技术管理进阶——什么Leader值得追随?

    原创不易,求分享.求一键三连 ​Leader眼里的主动性 前几天孙狗下面小A身上发生了一件Case,让他感到很疑惑: 有一个跨部门较多的项目推进不力,于是善于交流的他被临时提拔成项目负责人,但马上令人 ...

  3. SSM实现个人博客-day02

    2.数据库设计 项目源码:SSM实现个人博客 有问题请询问vx:kht808

  4. Filebeat和logstash 使用过程中遇到的一些小问题记录

    一.filebeat 收集软链文件日志 1.1.场景 由于我们新部署的Nginx 日志都是采用的软链的形式. lrwxrwxrwx 1 root root 72 Apr 6 00:00 jy.baid ...

  5. linux lvm逻辑卷管理之lvdisplay命令

    linux 磁盘管理分fdisk parted 和LVM三种方式,我们这里重点是说lvm 我们来看看LVM基本术语(lvm和传统fdisk分区方式有区别)由于传统的磁盘管理不能对磁盘进行磁盘管理,因此 ...

  6. ajax - 终结篇jsonp,防抖节流

    今天是我们最后一天ajax的学习,这次学完总可以去vue了吧,我不信还有什么拦路石,先不说其他的先看看今天的内容. 1. 首先是同源策略,什么叫做同源? 如果两个页面的协议.域名.端口都相同的话,我们 ...

  7. Linux内核--链表结构(二)

    Linux内核链表定义了一系列用于链表遍历的宏,本章详细描述. 一.container_of和offsetof 首先介绍两个很好用的宏container_of和offsetof.offsetof宏用于 ...

  8. signed integer overflow整数溢出

    整数越界情况 1. 数组下标越界, 大于N或者小于0 2. 数字过大,可以选择取个模,或者换long long, double  我笑了 还有一个暂时没有好的解决方法的:string s:cin/输入 ...

  9. Codeforces Round #710 (Div. 3) Editorial 1506A - Strange Table

    题目链接 https://codeforces.com/contest/1506/problem/A 原题 1506A - Strange Table Example input 5 1 1 1 2 ...

  10. Edu Cf Round 105 (Div. 2) B. Berland Crossword 1.读懂题, 2. 思维

    一. 原题链接 https://codeforces.com/contest/1494/problem/B   二. 题意 + 题解: 没看懂题目, 懵了好久, 先狡辩一下当时误解的句子, 英语是硬伤 ...