es基础
1、创建Maven工程
添加pom依赖,pom.xml代码如下
复制代码
复制代码
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 }
复制代码
创建索引库:
复制代码
/**
* 创建索引库
* @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字符串
复制代码
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、更新索引库数据
复制代码
/**
* 更新索引库数据
* @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、删除索引库的数据
复制代码
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了,说明删除成功。
浙公网安备 33010602011771号