java操作ElasticSearch之创建客户端连接
pom依赖
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <slf4j.version>1.7.7</slf4j.version> <log4j2.version>2.9.1</log4j2.version> <disruptor.version>3.2.0</disruptor.version> <junit.version>4.12</junit.version> <javax.servlet.version>4.0.0</javax.servlet.version> <jstl.version>1.2</jstl.version> <standard.version>1.1.2</standard.version> <tomcat-jsp-api.version>8.0.47</tomcat-jsp-api.version> </properties> <dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>5.5.2</version> </dependency> <!-- log配置:Log4j2 + Slf4j --> <!-- slf4j核心包 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> <scope>runtime</scope> </dependency> <!--用于与slf4j保持桥接 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j2.version}</version> </dependency> <!--核心log4j2jar包 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j2.version}</version> </dependency> <!--web工程需要包含log4j-web,非web工程不需要 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>${log4j2.version}</version> <scope>runtime</scope> </dependency> <!--需要使用log4j2的AsyncLogger需要包含disruptor --> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>${disruptor.version}</version> </dependency> <!-- 5、other --> <!-- 5.1、junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- 5.2、servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${javax.servlet.version}</version> <scope>provided</scope> </dependency> <!-- 5.3、jstl、standard --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>${standard.version}</version> </dependency> <!-- 5.4、tomcat-jsp-api --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> <version>${tomcat-jsp-api.version}</version> </dependency> </dependencies>
代码如下
package com.javaxl.elasticsearch; 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 java.net.InetAddress; /** * @author 小李飞刀 * @site www.javaxl.com * @company * @create 2019-10-11 23:36 * 讲解Java操作ElasticSearch之创建客户端连接 */ public class Demo1 { private static String host="192.168.195.128"; // 服务器地址 private static int port=9300; // 端口(注意:这里是9300不是9200,Java连接elasticsearch是9300) public static void main(String[] args) throws Exception{ TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Demo1.host), Demo1.port)); System.out.println(client); client.close(); } }
结果如下
Java操作ElasticSearch之创建索引
ElasticSearch客户端提供了多种方式的数据创建方式,包括json串,map,内置工具;我们正式开始一般用json格式,借助json工具框架,比如gson ,json-lib,fastjson等等;
Pom依赖
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency>
相关代码
package com.javaxl.elasticsearch; import com.google.gson.JsonObject; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.net.InetAddress; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * @author 小李飞刀 * @site www.javaxl.com * @company * @create 2019-10-11 23:51 * * 构建索引 */ public class Demo2 { private static String host="192.168.195.128"; // 服务器地址 private static int port=9300; // 端口(注意:这里是9300不是9200,Java连接elasticsearch是9300) private TransportClient client=null; /** * 获取连接 * @return */ @SuppressWarnings({ "unchecked", "resource" }) @Before public void getCient()throws Exception{ client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Demo2.host), Demo2.port)); } /** * 关闭连接 */ @After public void close(){ if(client!=null){ client.close(); } } /** * 添加索引 */ @Test public void testIndex()throws Exception{ IndexResponse response =client.prepareIndex("twitter", "tweet", "1") .setSource(XContentFactory.jsonBuilder() .startObject() .field("user", "kimchy") .field("postDate", new Date()) .field("message", "trying out Elasticsearch") .endObject() ) .get(); System.out.println("索引名称:"+response.getIndex()); System.out.println("类型:"+response.getType()); System.out.println("文档ID:"+response.getId()); System.out.println("当前实例状态:"+response.status()); } /** * 添加索引 */ @Test public void testIndex2()throws Exception{ String json = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; IndexResponse response =client.prepareIndex("weibo", "tweet") .setSource(json,XContentType.JSON) .get(); System.out.println("索引名称:"+response.getIndex()); System.out.println("类型:"+response.getType()); System.out.println("文档ID:"+response.getId()); System.out.println("当前实例状态:"+response.status()); } /** * 添加索引(推荐) */ @Test public void testIndex3()throws Exception{ Map<String, Object> json = new HashMap<String, Object>(); json.put("user","kimchy"); json.put("postDate",new Date()); json.put("message","trying out Elasticsearch"); IndexResponse response =client.prepareIndex("qq", "tweet") .setSource(json) .get(); System.out.println("索引名称:"+response.getIndex()); System.out.println("类型:"+response.getType()); System.out.println("文档ID:"+response.getId()); System.out.println("当前实例状态:"+response.status()); } /** * 添加索引(推荐) */ @Test public void testIndex4()throws Exception{ JsonObject jsonObject=new JsonObject(); jsonObject.addProperty("user", "kimchy"); jsonObject.addProperty("postDate", "1989-11-11"); jsonObject.addProperty("message", "trying out Elasticsearch"); IndexResponse response =client.prepareIndex("qq", "tweet") .setSource(jsonObject.toString(), XContentType.JSON) .get(); System.out.println("索引名称:"+response.getIndex()); System.out.println("类型:"+response.getType()); System.out.println("文档ID:"+response.getId()); System.out.println("当前实例状态:"+response.status()); } }
ElasticSearch提供了根据索引名称,类别,文档ID来获取数据
@Test public void testGet(){ GetResponse getResponse=client.prepareGet("qq", "tweet", "AW27kGdKTaHvtyXntOp6").get(); System.out.println(getResponse.getSourceAsString()); }
Java操作ElasticSearch之Update数据
相关代码如下
@Test public void testUpdate(){ JsonObject jsonObject=new JsonObject(); jsonObject.addProperty("user", "小李飞刀"); jsonObject.addProperty("postDate", "2019-10-11"); jsonObject.addProperty("message", "学习Elasticsearch"); UpdateResponse response = client.prepareUpdate("qq", "tweet", "AW27kGdKTaHvtyXntOp6").setDoc(jsonObject.toString(),XContentType.JSON).get(); System.out.println("索引名称:"+response.getIndex()); System.out.println("类型:"+response.getType()); System.out.println("文档ID:"+response.getId()); System.out.println("当前实例状态:"+response.status()); }
执行更新索引方法
再次获取索引值
Java操作ElasticSearch之Delete数据
ElasticSearch提供了根据索引名称,类别,文档ID来删除数据
相关代码如下
@Test public void testDelete(){ DeleteResponse response=client.prepareDelete("qq", "tweet", "AW27kGdKTaHvtyXntOp6").get(); System.out.println("索引名称:"+response.getIndex()); System.out.println("类型:"+response.getType()); System.out.println("文档ID:"+response.getId()); System.out.println("当前实例状态:"+response.status()); }
执行删除索引方法
再次去获取索引
over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有