package javaapi;
import java.io.IOException;
import java.net.InetAddress;
import java.util.concurrent.ExecutionException;
import org.apache.log4j.Logger;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class Update {
protected TransportClient client;
Logger logger = Logger.getLogger(Update.class);
@Before
public void setUp() throws Exception{
// on startup
/**
* 1. java客户端的方式是以tcp协议在9300端口上进行通信
* 2. http客户端的方式是以http协议在9200端口上进行通信
*/
//此步骤添加IP,至少一个,如果设置了"client.transport.sniff"= true 一个就够了,因为添加了自动嗅探配置
client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
//.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9201));
// on shutdown 关闭client
//client.close();
}
@After
public void tearDown() throws Exception {
if (client != null) {
client.close();
}
}
@Test
public void insert() throws IOException{
XContentBuilder builder = XContentFactory.jsonBuilder().startObject();
builder = builder.field("name","yan");
builder = builder.field("age",23);
builder = builder.endObject();
IndexResponse response = client.prepareIndex("person", "mail","1").setSource(builder).get();
System.out.println("创建成功!");
}
/*
* 使用prepareUpdate更新
* 1.当id不存在时,不会自动插入,直接报错“document missing”
* 2.可以更新局部字段(map里有多少字段更新多少,也可以增加map里面新字段)
*/
@Test
public void update() throws IOException{
XContentBuilder builder = XContentFactory.jsonBuilder().startObject();
builder = builder.field("name","circle");
builder = builder.field("age",21);
builder = builder.field("sex","female");
builder = builder.endObject();
try{
UpdateResponse response = client.prepareUpdate("person", "mail","10").setDoc(builder).get();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("更新成功!");
}
/*
* 使用UpdateRequest更新
*
*/
@Test
public void updateByRequest()
{
try {
XContentBuilder builder = XContentFactory.jsonBuilder().startObject();
builder = builder.field("name","杜波");
builder = builder.field("age",21);
builder = builder.field("sex","boy");
builder = builder.endObject();
UpdateRequest updaterequest = new UpdateRequest("person","mail","AWIYvg8htx3bwuETMEUO");
updaterequest.doc(builder);
client.update(updaterequest).get();
System.out.println("更新成功");
} catch (IOException e) {
e.printStackTrace();
System.out.println("更新失败");
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("更新失败");
} catch (ExecutionException e) {
e.printStackTrace();
System.out.println("更新失败");
}
}
/*
* 更新插入,如果存在文档就更新,如果不存在就插入
*/
@Test
public void upsert() throws IOException{
XContentBuilder builder = XContentFactory.jsonBuilder().startObject();
builder = builder.field("name","circle");
builder = builder.field("age",21);
builder = builder.field("sex","female");
builder = builder.endObject();
IndexRequest indexRequest = new IndexRequest("person", "mail", "10")
.source(builder);
UpdateRequest updateRequest = new UpdateRequest("person", "mail", "10")
.doc(builder)
.upsert(indexRequest); //如果不存在此文档 ,就增加 `indexRequest`
try {
client.update(updateRequest).get();
System.out.println("更新成功");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
elasticsearch Java API 索引更新
最新推荐文章于 2024-06-21 17:55:16 发布