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 索引更新
猜你喜欢
转载自blog.csdn.net/yan3013216087/article/details/79531556
今日推荐
周排行