package com.xuyw.blog;
import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptService;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;
import static org.elasticsearch.common.xcontent.XContentFactory.*;
import com.alibaba.fastjson.JSON;
import com.xuyw.model.Blog;
public class BlogTest {
private TransportClient client = null;
@SuppressWarnings("resource")
@Before
public void before() throws Exception {
Map<String, String> map = new HashMap<>();
map.put("cluster.name", "my-application");
Settings settings = Settings.builder().put(map).build();
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
System.out.println("Started ES client");
}
/**
* 创建索引
*/
@Test
public void testCreateIndex() {
String json = "{" + "\"user\":\"xuyw\"," + "\"postDate\":\"2017-12-08\"," + "\"message\":\"Elasticsearch demo\""
+ "}";
IndexResponse response = client.prepareIndex("twitter", "article", "1").setSource(json).get();
System.out.println(" 索引名称:" + response.getIndex());
System.out.println(" 类型名称:" + response.getType());
System.out.println(" 文档id:" + response.getId());
System.out.println(" 版本:" + response.getVersion());
}
/**
* 添加数据
*/
@Test
public void testAddData() {
List<String> jsonData = new ArrayList<>();
jsonData.add(JSON.toJSONString(new Blog(1, "git简介", "2016-06-19", "SVN与Git最主要的区别...")));
jsonData.add(JSON.toJSONString(new Blog(2, "Java中泛型的介绍与简单使用", "2016-06-19", "学习目标 掌握泛型的产生意义...")));
jsonData.add(JSON.toJSONString(new Blog(3, "SQL基本操作", "2016-06-19", "基本操作:CRUD ...")));
jsonData.add(JSON.toJSONString(new Blog(4, "Hibernate框架基础", "2016-06-19", "Hibernate框架基础...")));
jsonData.add(JSON.toJSONString(new Blog(5, "Shell基本知识", "2016-06-19", "Shell是什么...")));
for (int i = 0; i < jsonData.size(); i++) {
IndexResponse response = client.prepareIndex("twitter", "article").setSource(jsonData.get(i)).get();
// 输出结果
System.out.println(JSON.toJSON(response));
}
}
/**
* 查找
*/
@Test
public void testQuery() {
// 搜索数据
GetResponse response = client.prepareGet("twitter", "article", "1").execute().actionGet();
// 输出结果
System.out.println(response.getSourceAsString());
}
/**
* 查找
*/
@Test
public void testQuery2() {
// 单个字段的查询
QueryBuilder qb1 = QueryBuilders.termQuery("title", "hibernate");
// 多个字段的查询
QueryBuilder qb2 = QueryBuilders.multiMatchQuery("git", "title", "content");
// 搜索数据
SearchResponse response = client.prepareSearch("twitter").setTypes("article").setQuery(qb1).execute()
.actionGet();
SearchHits hits = response.getHits();
if (hits.totalHits() > 0) {
for (SearchHit hit : hits) {
System.out.println("score:" + hit.getScore() + ":\t" + hit.getSource());// .get("title")
}
} else {
System.out.println("搜到0条结果");
}
}
@Test
public void testUpdate() throws Exception {
// 方法一:创建一个UpdateRequest,然后将其发送给client.
UpdateRequest uRequest = new UpdateRequest();
uRequest.index("twitter");
uRequest.type("article");
uRequest.id("1");
uRequest.doc(jsonBuilder().startObject().field("content", "学习目标 掌握java泛型的产生意义update").endObject());
// client.update(uRequest).get();
// 方法二:prepareUpdate() 使用脚本更新索引
// elasticsearch.yml,新增一行:script.engine.groovy.inline.update: on
/*
* client.prepareUpdate("twitter", "article", "1").setScript(new
* Script("ctx._source.title = \"git入门\"")).get();
*/
// 方法三:prepareUpdate() 使用doc更新索引
/*
* client.prepareUpdate("twitter", "article", "1")
* .setDoc(jsonBuilder().startObject().field("content",
* "SVN与Git对比。。。").endObject()).get();
*/
// 方法四: 增加新的字段
UpdateRequest updateRequest = new UpdateRequest("twitter", "article", "1")
.doc(jsonBuilder().startObject().field("commet", "0").endObject());
// client.update(updateRequest).get();
// 方法五:upsert 如果文档不存在则创建新的索引
IndexRequest indexRequest = new IndexRequest("twitter", "article", "10").source(
jsonBuilder().startObject().field("title", "Git安装10").field("content", "学习目标 git。。。10").endObject());
UpdateRequest uRequest2 = new UpdateRequest("twitter", "article", "10")
.doc(jsonBuilder().startObject().field("title", "Git安装").field("content", "学习目标 git。。。").endObject())
.upsert(indexRequest);
client.update(uRequest2).get();
}
@Test
public void testDelete() {
//ID 删除
DeleteResponse dResponse = client.prepareDelete("twitter", "article", "10").execute().actionGet();
System.out.println(JSON.toJSONString(dResponse));
}
}
Elasticsearch demo
最新推荐文章于 2024-09-13 08:13:47 发布