Elasticsearch 之(47) Java API 基于bulk实现多4S店销售数据批量上传
业务场景:有一个汽车销售公司,拥有很多家4S店,这些4S店的数据,都会在一段时间内陆续传递过来,汽车的销售数据,现在希望能够在内存中缓存比如1000条销售数据,然后一次性批量上传到es中去
初始化数据
初始化数据
PUT /car_shop/sales/1 { "brand": "宝马", "name": "宝马320", "price": 320000, "produce_date": "2017-01-01", "sale_price": 300000, "sale_date": "2017-01-21" } PUT /car_shop/sales/2 { "brand": "宝马", "name": "宝马320", "price": 320000, "produce_date": "2017-01-01", "sale_price": 300000, "sale_date": "2017-01-21" }
package com.es.app; import org.elasticsearch.action.bulk.BulkItemResponse; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.delete.DeleteRequestBuilder; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateRequestBuilder; 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.XContentFactory; import org.elasticsearch.transport.client.PreBuiltTransportClient; import java.net.InetAddress; public class BulkCarInfoApp { public static void main(String[] args) throws Exception{ Settings settings = Settings.builder() .put("cluster.name", "elasticsearch") .put("client.transport.sniff", true) .build(); TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); IndexRequestBuilder indexRequestBuilder = client.prepareIndex("car_shop", "sales", "3") .setSource(XContentFactory.jsonBuilder() .startObject() .field("brand", "奔驰") .field("name", "奔驰C200") .field("price", 350000) .field("produce_date", "2017-01-20") .field("sale_price", 320000) .field("sale_date", "2017-01-25") .endObject()); bulkRequestBuilder.add(indexRequestBuilder); UpdateRequestBuilder updateRequestBuilder = client.prepareUpdate("car_shop", "sales", "1") .setDoc(XContentFactory.jsonBuilder() .startObject() .field("sale_price", 290000) .endObject()); bulkRequestBuilder.add(updateRequestBuilder); DeleteRequestBuilder deleteRequestBuilder = client.prepareDelete("car_shop", "sales", "2"); bulkRequestBuilder.add(deleteRequestBuilder); BulkResponse bulkResponse = bulkRequestBuilder.get(); for(BulkItemResponse bulkItemResponse : bulkResponse.getItems()) { System.out.println("version: " + bulkItemResponse.getVersion()); } client.close(); } }