首页 技术 正文
技术 2022年11月6日
0 收藏 531 点赞 810 浏览 7100 个字

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:https://gitee.com/SunnySVN/Elasticsearch

欢迎各位加群讨论:534073451

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,817
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,900