进阶-第84__熟练掌握ES 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"

}

 

 

执行bulk操作

基于bulk执行插入,更新,和删除的操作

 

package com.es.core.senior;

import java.net.InetAddress;

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.IndexRequestBuilder;
import org.elasticsearch.action.update.UpdateRequestBuilder;
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;

public class BulkUploadSalesDataApp {

    @SuppressWarnings({"resource", "unchecked"})
    public static void main(String[] args) throws Exception {
        Settings settings = Settings
                .builder()
                .put("cluster.name", "elasticsearch").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) {
            System.out.println("version:" + bulkItemResponse.getVersion());
        }

        client.close();
    }

}

 

 

查看结果

GET /car_shop/sales/_search

结果:

{

  "took": 2,

  "timed_out": false,

  "_shards": {

    "total": 5,

    "successful": 5,

    "failed": 0

  },

  "hits": {

    "total": 2,

    "max_score": 1,

    "hits": [

      {

        "_index": "car_shop",

        "_type": "sales",

        "_id": "1",

        "_score": 1,

        "_source": {

          "brand": "宝马",

          "name": "宝马320",

          "price": 320000,

          "produce_date": "2017-01-01",

          "sale_price": 290000,

          "sale_date": "2017-01-21"

        }

      },

      {

        "_index": "car_shop",

        "_type": "sales",

        "_id": "3",

        "_score": 1,

        "_source": {

          "brand": "奔驰",

          "name": "奔驰C200",

          "price": 350000,

          "produce_date": "2017-01-20",

          "sale_price": 320000,

          "sale_date": "2017-01-25"

        }

      }

    ]

  }

}

 

猜你喜欢

转载自blog.csdn.net/qq_35524586/article/details/88706216
今日推荐