Elasticsearch索引的创建、数据的增删该查操作

  上一章节已经在Linux系统上安装Elasticsearch并且可以外网访问,这节主要通过Java代码操作Elasticsearch

1、创建Maven工程

  添加pom依赖,pom.xml代码如下

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.sun.elasticsearch</groupId>
  5. <artifactId>Elasticsearch01</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <dependencies>
  8. <!-- Elasticsearch核心依赖包 -->
  9. <dependency>
  10. <groupId>org.elasticsearch.client</groupId>
  11. <artifactId>transport</artifactId>
  12. <version>5.5.2</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>4.12</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <!-- 日志依赖 -->
  21. <dependency>
  22. <groupId>org.slf4j</groupId>
  23. <artifactId>slf4j-log4j12</artifactId>
  24. <version>1.7.21</version>
  25. <scope>test</scope>
  26. </dependency>
  27. <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
  28. <dependency>
  29. <groupId>org.apache.logging.log4j</groupId>
  30. <artifactId>log4j-core</artifactId>
  31. <version>2.8.2</version>
  32. </dependency>
  33. <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
  34. <dependency>
  35. <groupId>com.google.code.gson</groupId>
  36. <artifactId>gson</artifactId>
  37. <version>2.8.0</version>
  38. </dependency>
  39. </dependencies>
  40. </project>

2、通过Java程序连接Elasticsearch

  需要注意的是,上一章节我们通过浏览器http://192.168.1.140:9200访问可以正常访问,这里需要知晓,9200端口是用于Http协议访问的,如果通过客户端访问需要通过9300端口才可以访问

,具体调用代码如下  

  1. package com.sun.elasticsearch;
  2.  
  3. import java.net.InetAddress;
  4. import java.net.UnknownHostException;
  5.  
  6. import org.elasticsearch.client.transport.TransportClient;
  7. import org.elasticsearch.common.settings.Settings;
  8. import org.elasticsearch.common.transport.InetSocketTransportAddress;
  9. import org.elasticsearch.transport.client.PreBuiltTransportClient;
  10. import org.junit.Test;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13.  
  14. /**
  15. * Elasticsearch的基本测试
  16. * @ClassName: ElasticsearchTest1
  17. * @author sunt
  18. * @date 2017年11月22日
  19. * @version V1.0
  20. */
  21. public class ElasticsearchTest1 {
  22.  
  23. private Logger logger = LoggerFactory.getLogger(ElasticsearchTest1.class);
  24.  
  25. public final static String HOST = "192.168.1.140";
  26.  
  27. public final static int PORT = 9300;//http请求的端口是9200,客户端是9300
  28.  
  29. /**
  30. * 测试Elasticsearch客户端连接
  31. * @Title: test1
  32. * @author sunt
  33. * @date 2017年11月22日
  34. * @return void
  35. * @throws UnknownHostException
  36. */
  37. @SuppressWarnings("resource")
  38. @Test
  39. public void test1() throws UnknownHostException {
  40. //创建客户端
  41. TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddresses(
  42. new InetSocketTransportAddress(InetAddress.getByName(HOST),PORT));
  43.  
  44. logger.debug("Elasticsearch connect info:" + client.toString());
  45.  
  46. //关闭客户端
  47. client.close();
  48. }
  49. }    

3、Elasticsearch索引库的创建

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

  1. private Logger logger = LoggerFactory.getLogger(ElasticsearchTest2.class);
  2.  
  3. public final static String HOST = "192.168.1.140";
  4.  
  5. public final static int PORT = 9300; //http请求的端口是9200,客户端是9300
  6.  
  7. private TransportClient client = null;
  8. /**
  9. * 获取客户端连接信息
  10. * @Title: getConnect
  11. * @author sunt
  12. * @date 2017年11月23日
  13. * @return void
  14. * @throws UnknownHostException
  15. */
  16. @SuppressWarnings({ "resource", "unchecked" })
  17. @Before
  18. public void getConnect() throws UnknownHostException {
  19. client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddresses(
  20. new InetSocketTransportAddress(InetAddress.getByName(HOST),PORT));
  21. logger.info("连接信息:" + client.toString());
  22. }
  23.  
  24. /**
  25. * 关闭连接
  26. * @Title: closeConnect
  27. * @author sunt
  28. * @date 2017年11月23日
  29. * @return void
  30. */
  31. @After
  32. public void closeConnect() {
  33. if(null != client) {
  34. logger.info("执行关闭连接操作...");
  35. client.close();
  36. }
  37. }

创建索引库:

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

PS: 索引库名称必须为小写,如果为大写会包如下错误信息

第二、Elasticsearch是5.5.2版本,最新的6.0版本代码运行会报如下错误,折腾了半天还是没有调试成功,最后无奈只能换为5.5.2版本,

这里重点说明,可能当初写的比较粗略,这里指得版本号是安装软件的版本号,maven版本号最好跟软件的大版本号保持一致

此时运行代码控制台打印出如下结果,说明此时已经在ElasticSearch中创建成功一个为msg的索引库

4、向索引库中添加json字符串

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

执行结果如下:CREATED说明向索引库添加数据成功

5、向索引库添加一个Map集合

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

执行结果:

6、向索引库添加JsonObject

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

执行结果:

7、从索引库获取数据

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

执行结果:

8、更新索引库数据

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

执行结果:

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

9、删除索引库的数据

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

执行结果:

删除之后再次执行从索引库获取数据,结果如下

索引库的数据变为null了,说明删除成功

10、完整源代码svn地址:svn://gitee.com/SunnySVN/Elasticsearch

欢迎各位加群讨论:534073451

Elasticsearch入门系列~通过Java一系列操作Elasticsearch的更多相关文章

  1. 使用Java客户端操作elasticsearch(二)

    承接上文,使用Java客户端操作elasticsearch,本文主要介绍 常见的配置 和Sniffer(集群探测) 的使用. 常见的配置 前面已介绍过,RestClientBuilder支持同时提供一 ...

  2. 使用Java客户端操作elasticsearch

    Java REST客户端有两种风格: Java低级别REST客户端(Java Low Level REST Client,以后都简称低级客户端算了,难得码字):Elasticsearch的官方low- ...

  3. Elasticsearch 入门,基本概念和操作

    基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...

  4. ElasticSearch入门系列(一)是什么以及安装和运行

    一.是什么 ElasticSearch是一个基于Apache Lucene的开源搜索引擎. Elasticsearch: 分布式的实时文件存储,每个字段都被所用并可被搜索 分布式的实时分析搜索引擎 可 ...

  5. linux入门系列2--CentOs图形界面操作及目录结构

    上一篇文章"linux入门系列1--环境准备及linux安装"直观演示了虚拟机软件VMware和Centos操作系统的安装,按照文章一步一步操作,一定都可以安装成功.装好系统之后, ...

  6. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  7. ElasticSearch入门系列(六)分布式操作

    一.路由文档到分片 当你索引一个文档的时候,他被存储在单独一个主分片上.Elasticsearch根据一个算法来找到所在分片上. shard=hash(routing)%number_of_prima ...

  8. Java代码操作Elasticsearch

    创建maven项目,导入依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</a ...

  9. ElasticSearch 5.0.1 java API操作

    今天来说下使用ES 5.0.1的API来进行编码. 开始之前,简单说下5.0.1跟之前的几个变化.之前的ES自身是不支持delete-by-query的,也就是通过查询来删除,可以达到批量的效果,是因 ...

随机推荐

  1. Import .bak file to a database in SQL server

    https://stackoverflow.com/questions/1535914/import-bak-file-to-a-database-in-sql-server On SQL Serve ...

  2. springboot 统一管理异常信息

    新建ResponseEntityExceptionHandler的继承类:(依然,需要入口类扫描) /** * @author sky * @version 1.0 */ @ControllerAdv ...

  3. HTTP 各种特性应用(一)

    一. CORS 预请求 允许方法: GET. HEAD. POST 这三个方法 不需要预请求. 允许 Content-Type text/plain. multipart/form-data. app ...

  4. Coderfroces 862 C. Mahmoud and Ehab and the xor

    C. Mahmoud and Ehab and the xor Mahmoud and Ehab are on the third stage of their adventures now. As ...

  5. HTML5新增的一些特性

    HTML现在已经不是SGML的子集,主要是关于图像,位置,储存,多任务等功能的增加. .绘画canvas: .用于媒介回放的video: Ogg是带有Theora视频编码和Vorbis音频编码的文件: ...

  6. Linux VNC客户端软件VNC Viewer | RealVNC

    Linux很多时候是作为服务器操作系统,如果是桌面系统通常情况会远程管理linux服务器,很多时候通过VNC进行远程管理,这个时候就要在客户端安装VNC客户端软件,VNC Viewer | RealV ...

  7. 海康录像机 POE 输送距离 实验

    条件:网线 使用亨通  (移动公司使用网线) 测试一:   网线  为130米    白天       摄像头正常录像 电压      3,7号线                 19.6V 测试二: ...

  8. Laravel 框架指定路由关闭 csrf

    修改 app\Http\Middleware\VerifyCsrfToken.php 内容: <?php namespace App\Http\Middleware; use Closure; ...

  9. py2exe打包python脚本

    在工作中遇到将python脚本转换成exe可执行程序的需求,通过查询可以使用py2exe来构建满足要求的程序,这里简要说明一下使用步骤. 一.py2exe是一个将python脚本转换成windows上 ...

  10. Hexo High一下以及压缩排版问题

    背景介绍 集成Hight一下以及Gulp-html压缩之后出现的问题: High一下功能多次点击,会创建多个Audio对象,导致同时播放多次音乐,重音.解决办法:判断是否添加Audio对象,如果存在则 ...