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晓码阁 版权所有