1.保存文档
可以通过json工具把java对象转换成json字符串进行保存,也可以通过内置的帮助类直接构建json格式
/**
* 获取客户端
*
* @return
*/
public static TransportClient getClient() {
Settings settings = Settings.builder().put("cluster.name", "es_cluster").build();
TransportClient client = null;
try {
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("10.118.213.215"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}
return client;
}
/**
* 保存文档到索引中
*
* @param indexName
* @param typeName
* @param id
* @param docJson
*/
public static void insertDoc(String indexName, String typeName, String id, String docJson) {
IndexResponse response = getClient().prepareIndex(indexName, typeName, id).setSource(docJson, XContentType.JSON)
.get();
System.out.println(response.status());
}
测试保存
public static void main(String[] args) throws Exception {
// 时间格式转换
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
// 保存数据
Telegraph telegraph = new Telegraph();
telegraph.setAuthor("财政部部长");
telegraph.setTitle("中方正在加快推进各项开放措施的落地");
telegraph.setContent("财联社7月23日讯,财政部部长刘昆指出,中方正在加快推进各项开放措施的落地。中国开放的大门将越开越大,不仅促进中国高质量发展,也为全球经济增长提供重要动力");
telegraph.setPubdate(formatter.format(new Date()));
// 对象转换为json字符串
String json = JSONObject.toJSONString(telegraph);
System.out.println(json);
insertDoc("telegraph", "msg", "1", json);
// 使用内置帮助类XContentFactory构造json格式文档
XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("title", "长生生物官网被黑客攻击")
.field("author", "长生生物")
.field("content", "财联社7月23日讯,长生科技官网首页被黑客攻击,并配图“不搞你,对不起祖国的花朵”。打开长生生物的官网,显示网站已无法打开,错误提示404,截至发稿,网站尚未恢复")
.field("pubdate", formatter.format(new Date())).endObject();
System.out.println(builder.string());
insertDoc("telegraph", "msg", "2", builder.string());
}
2.获取文档
根据文档索引、类型、id获取文档内容
/**
* 获取文档
* @param indexName
* @param typeName
* @param id
* @return
*/
public static String getIndexDoc(String indexName, String typeName, String id) {
GetResponse response = getClient().prepareGet(indexName, typeName, id).get();
System.out.println(response.getVersion());
return response.getSourceAsString();
}
测试获取文档
public static void main(String[] args) {
String source = getIndexDoc("telegraph", "msg", "2");
System.out.println(source);
}
3.删除文档
/**
* 删除文档
* @param indexName
* @param typeName
* @param id
*/
public static void deleteDoc(String indexName,String typeName,String id){
DeleteResponse response = getClient().prepareDelete(indexName, typeName, id).get();
System.out.println(response.status());
}
测试
public static void main(String[] args) {
deleteDoc("telegraph", "msg", "1");
}
4.更新文档
/**
* 更新文档内容
*
* @param indexName
* @param typeName
* @param id
* @param fields
* @throws Exception
*/
public static void updateDoc(String indexName, String typeName, String id, Map<String, Object> fields)
throws Exception {
UpdateRequest request = new UpdateRequest();
XContentBuilder builder = XContentFactory.jsonBuilder().startObject();
for (String key : fields.keySet()) {
builder.field(key, fields.get(key));
}
builder.endObject();
request.index(indexName).type(typeName).id(id).doc(builder);
UpdateResponse response = getClient().update(request).get();
System.out.println(response.toString());
}
测试
public static void main(String[] args) {
Map<String, Object> fields = new HashMap<String, Object>();
fields.put("title", "长生生物涉案狂犬病疫苗被指未作动物实验检测");
try {
updateDoc("telegraph", "msg", "2", fields);
} catch (Exception e) {
e.printStackTrace();
}
}
5.文档存在时更新不存在时新增
/**
* 如果更新内容不存在,创建文档
*
* @param indexName
* @param typeName
* @param id
* @param indexDoc 添加内容
* @param updateField 更新内容
* @throws Exception
*/
public static void upset(String indexName, String typeName, String id, Map<String, Object> indexDoc,
Map<String, Object> updateField) throws Exception {
// 创建新增request
IndexRequest indexRequest = new IndexRequest(indexName, typeName, id);
XContentBuilder indexBuilder = XContentFactory.jsonBuilder().startObject();
for (String key : indexDoc.keySet()) {
indexBuilder.field(key, indexDoc.get(key));
}
indexBuilder.endObject();
System.out.println(indexBuilder.string());
indexRequest.source(indexBuilder);
// 创建更新request
UpdateRequest updateRequest = new UpdateRequest(indexName, typeName, id);
XContentBuilder updateBuilder = XContentFactory.jsonBuilder().startObject();
for (String key : updateField.keySet()) {
updateBuilder.field(key, updateField.get(key));
}
updateBuilder.endObject();
System.out.println(updateBuilder.string());
updateRequest.doc(updateBuilder).upsert(indexRequest);
UpdateResponse response = getClient().update(updateRequest).get();
System.out.println(response.toString());
}
测试
public static void main(String[] args) throws Exception{
//如果存在就更新
Map<String, Object> fields = new HashMap<String, Object>();
fields.put("title", "被更新之后title");
//如果不存在就新增
Map<String, Object> indexDoc = new HashMap<String, Object>();
indexDoc.put("title","第一次测试添加title");
indexDoc.put("content", "测试添加内容");
upset("telegraph","msg","2",indexDoc,fields);
}