Elasticsearch入门系列~通过Java一系列操作Elasticsearch
Elasticsearch索引的创建、数据的增删该查操作
上一章节已经在Linux系统上安装Elasticsearch并且可以外网访问,这节主要通过Java代码操作Elasticsearch
1、创建Maven工程
添加pom依赖,pom.xml代码如下

<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>com.sun.elasticsearch</groupId> <artifactId>Elasticsearch01</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- Elasticsearch核心依赖包 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>5.5.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 日志依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.0</version> </dependency> </dependencies> </project>

2、通过Java程序连接Elasticsearch
需要注意的是,上一章节我们通过浏览器http://192.168.1.140:9200访问可以正常访问,这里需要知晓,9200端口是用于Http协议访问的,如果通过客户端访问需要通过9300端口才可以访问
,具体调用代码如下

package com.sun.elasticsearch; import java.net.InetAddress; import java.net.UnknownHostException; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Elasticsearch的基本测试 * @ClassName: ElasticsearchTest1 * @author sunt * @date 2017年11月22日 * @version V1.0 */ public class ElasticsearchTest1 { private Logger logger = LoggerFactory.getLogger(ElasticsearchTest1.class); public final static String HOST = "192.168.1.140"; public final static int PORT = 9300;//http请求的端口是9200,客户端是9300 /** * 测试Elasticsearch客户端连接 * @Title: test1 * @author sunt * @date 2017年11月22日 * @return void * @throws UnknownHostException */ @SuppressWarnings("resource") @Test public void test1() throws UnknownHostException { //创建客户端 TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddresses( new InetSocketTransportAddress(InetAddress.getByName(HOST),PORT)); logger.debug("Elasticsearch connect info:" + client.toString()); //关闭客户端 client.close(); } }

3、Elasticsearch索引库的创建
为了简化代码,我们在修改Junit测试类,在方法执行之前连接Elasticsearch,方法调用之后自动执行关闭Elasticsearch,通过@Before和@After注解实现,具体代码如下

private Logger logger = LoggerFactory.getLogger(ElasticsearchTest2.class); public final static String HOST = "192.168.1.140"; public final static int PORT = 9300; //http请求的端口是9200,客户端是9300 private TransportClient client = null; /** * 获取客户端连接信息 * @Title: getConnect * @author sunt * @date 2017年11月23日 * @return void * @throws UnknownHostException */ @SuppressWarnings({ "resource", "unchecked" }) @Before public void getConnect() throws UnknownHostException { client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddresses( new InetSocketTransportAddress(InetAddress.getByName(HOST),PORT)); logger.info("连接信息:" + client.toString()); } /** * 关闭连接 * @Title: closeConnect * @author sunt * @date 2017年11月23日 * @return void */ @After public void closeConnect() { if(null != client) { logger.info("执行关闭连接操作..."); client.close(); } }

创建索引库:

/** * 创建索引库 * @Title: addIndex1 * @author sunt * @date 2017年11月23日 * @return void * 需求:创建一个索引库为:msg消息队列,类型为:tweet,id为1 * 索引库的名称必须为小写 * @throws IOException */ @Test public void addIndex1() throws IOException { IndexResponse response = client.prepareIndex("msg", "tweet", "1").setSource(XContentFactory.jsonBuilder() .startObject().field("userName", "张三") .field("sendDate", new Date()) .field("msg", "你好李四") .endObject()).get(); logger.info("索引名称:" + response.getIndex() + "\n类型:" + response.getType() + "\n文档ID:" + response.getId() + "\n当前实例状态:" + response.status()); }

PS: 索引库名称必须为小写,如果为大写会包如下错误信息
第二、Elasticsearch是5.5.2版本,最新的6.0版本代码运行会报如下错误,折腾了半天还是没有调试成功,最后无奈只能换为5.5.2版本,
这里重点说明,可能当初写的比较粗略,这里指得版本号是安装软件的版本号,maven版本号最好跟软件的大版本号保持一致
此时运行代码控制台打印出如下结果,说明此时已经在ElasticSearch中创建成功一个为msg的索引库
4、向索引库中添加json字符串

/** * 添加索引:传入json字符串 * @Title: addIndex2 * @author sunt * @date 2017年11月23日 * @return void */ @Test public void addIndex2() { String jsonStr = "{" + "\"userName\":\"张三\"," + "\"sendDate\":\"2017-11-30\"," + "\"msg\":\"你好李四\"" + "}"; IndexResponse response = client.prepareIndex("weixin", "tweet").setSource(jsonStr,XContentType.JSON).get(); logger.info("json索引名称:" + response.getIndex() + "\njson类型:" + response.getType() + "\njson文档ID:" + response.getId() + "\n当前实例json状态:" + response.status()); }

执行结果如下:CREATED说明向索引库添加数据成功
5、向索引库添加一个Map集合

/** * 创建索引-传入Map对象 * @Title: addIndex3 * @author sunt * @date 2017年11月23日 * @return void */ @Test public void addIndex3() { Map<String, Object> map = new HashMap<String,Object>(); map.put("userName", "张三"); map.put("sendDate", new Date()); map.put("msg", "你好李四"); IndexResponse response = client.prepareIndex("momo", "tweet").setSource(map).get(); logger.info("map索引名称:" + response.getIndex() + "\n map类型:" + response.getType() + "\n map文档ID:" + response.getId() + "\n当前实例map状态:" + response.status()); }

执行结果:
6、向索引库添加JsonObject

/** * 传递json对象 * 需要添加依赖:gson * @Title: addIndex4 * @author sunt * @date 2017年11月23日 * @return void */ @Test public void addIndex4() { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("userName", "张三"); jsonObject.addProperty("sendDate", "2017-11-23"); jsonObject.addProperty("msg","你好李四"); IndexResponse response = client.prepareIndex("qq", "tweet").setSource(jsonObject, XContentType.JSON).get(); logger.info("jsonObject索引名称:" + response.getIndex() + "\n jsonObject类型:" + response.getType() + "\n jsonObject文档ID:" + response.getId() + "\n当前实例jsonObject状态:" + response.status()); }

执行结果:
7、从索引库获取数据

/** * 从索引库获取数据 * @Title: getData1 * @author sunt * @date 2017年11月23日 * @return void */ @Test public void getData1() { GetResponse getResponse = client.prepareGet("msg", "tweet", "1").get(); logger.info("索引库的数据:" + getResponse.getSourceAsString()); }

执行结果:
8、更新索引库数据

/** * 更新索引库数据 * @Title: updateData * @author sunt * @date 2017年11月23日 * @return void */ @Test public void updateData() { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("userName", "王五"); jsonObject.addProperty("sendDate", "2008-08-08"); jsonObject.addProperty("msg","你好,张三,好久不见"); UpdateResponse updateResponse = client.prepareUpdate("msg", "tweet", "1") .setDoc(jsonObject.toString(),XContentType.JSON).get(); logger.info("updateResponse索引名称:" + updateResponse.getIndex() + "\n updateResponse类型:" + updateResponse.getType() + "\n updateResponse文档ID:" + updateResponse.getId() + "\n当前实例updateResponse状态:" + updateResponse.status()); }

执行结果:
更新结束之后,再次调用从索引库获取数据执行结果如下:
9、删除索引库的数据

/** * 根据索引名称,类别,文档ID 删除索引库的数据 * @Title: deleteData * @author sunt * @date 2017年11月23日 * @return void */ @Test public void deleteData() { DeleteResponse deleteResponse = client.prepareDelete("msg", "tweet", "1").get(); logger.info("deleteResponse索引名称:" + deleteResponse.getIndex() + "\n deleteResponse类型:" + deleteResponse.getType() + "\n deleteResponse文档ID:" + deleteResponse.getId() + "\n当前实例deleteResponse状态:" + deleteResponse.status()); }

执行结果:
删除之后再次执行从索引库获取数据,结果如下
索引库的数据变为null了,说明删除成功
10、完整源代码svn地址:svn://gitee.com/SunnySVN/Elasticsearch
欢迎各位加群讨论:534073451
Elasticsearch入门系列~通过Java一系列操作Elasticsearch的更多相关文章
- 使用Java客户端操作elasticsearch(二)
承接上文,使用Java客户端操作elasticsearch,本文主要介绍 常见的配置 和Sniffer(集群探测) 的使用. 常见的配置 前面已介绍过,RestClientBuilder支持同时提供一 ...
- 使用Java客户端操作elasticsearch
Java REST客户端有两种风格: Java低级别REST客户端(Java Low Level REST Client,以后都简称低级客户端算了,难得码字):Elasticsearch的官方low- ...
- Elasticsearch 入门,基本概念和操作
基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...
- ElasticSearch入门系列(一)是什么以及安装和运行
一.是什么 ElasticSearch是一个基于Apache Lucene的开源搜索引擎. Elasticsearch: 分布式的实时文件存储,每个字段都被所用并可被搜索 分布式的实时分析搜索引擎 可 ...
- linux入门系列2--CentOs图形界面操作及目录结构
上一篇文章"linux入门系列1--环境准备及linux安装"直观演示了虚拟机软件VMware和Centos操作系统的安装,按照文章一步一步操作,一定都可以安装成功.装好系统之后, ...
- Kafka系列三 java API操作
使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
- ElasticSearch入门系列(六)分布式操作
一.路由文档到分片 当你索引一个文档的时候,他被存储在单独一个主分片上.Elasticsearch根据一个算法来找到所在分片上. shard=hash(routing)%number_of_prima ...
- Java代码操作Elasticsearch
创建maven项目,导入依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</a ...
- ElasticSearch 5.0.1 java API操作
今天来说下使用ES 5.0.1的API来进行编码. 开始之前,简单说下5.0.1跟之前的几个变化.之前的ES自身是不支持delete-by-query的,也就是通过查询来删除,可以达到批量的效果,是因 ...
随机推荐
- .net framework tools
https://docs.microsoft.com/en-us/dotnet/framework/tools/ Resgen.exe (Resource File Generator) Conver ...
- FTP配置说明
1.下载rpm包,如vsftpd-3.0.2-21.el7.x86_64.rpm.可在系统盘里面找到或者下载 2.参考如下步骤.或者见链接http://blog.csdn.net/uq_jin/art ...
- Linux下网络服务的安全设置
Linux下网络服务的安全设置 Linux操作系统由于其良好的稳定性.健壮性.高效性和安全性.正在成为各种网络服务的理想平台.各种网络应用在Linux系统上部有性能卓越的应用,例如,提供We ...
- CodeBlocks 配色方案
搜索<colour_sets>,在</ACTIVE_LANG>下加入: 有几种经典方案,包括vim,desert,sublime,ulipad,oblivion,darkgra ...
- Python之路:画空心矩形
1.if语句中当要判断多个语句成立才能执行语句时候,可以用or(或,只要其中一个成立就可以执行下一条语句)或者and(只要有其中一个不成立就不会执行下一条语句) 2.在Python中range函数会产 ...
- 【Django】安装及配置
目录 MVC框架与MTV框架 Django的MTV模式 Django框架图示 安装及配置 创建一个Django项目 目录介绍 运行Django项目 启动Django报错 模版文件配置 静态文件配置 A ...
- js---15深拷贝浅拷贝 原型链
//&&得到的结果不是布尔类型,如果前面都是 true就执行最后一个,并返回最后一个表达式的值,前面有一个为false,后面不执行,返回前面表达式的值 var a = 3; var b ...
- (转)OpenCV 基本知识框架
以下是对<学习OpenCV>一书知识框架的简单梳理 转自:http://blog.chinaunix.net/uid-8402201-id-2899695.html 一.基础操作 ...
- 最大子段和 模板题 51Nod 1049
N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13,-5,- ...
- Linux之lldptool命令
1. 描述 当我们想在操作系统里面查看网口和交换机连接的状态信息,我们可以使用lldptool这个工具. 2.LLDP协议 LLDP是一个数据链路层发现协议,LLDP协议使得接入网络的一台设备可以将其 ...