Elasticsearch7.8.0基本API、批量处理Bulk(下篇讲BulkProcessor )

哈~  Elasticsearch就不用过多介绍了吧,咱们直接将重点,不讲概念

楼主是个菜鸡,之前的项目里要用到Elasticsearch,经过楼主和架构的一番苦战、撕逼,终于,还是屈服于架构,弃用6.5版本,选用了最新版的7.8.0

讲真的,很痛苦的,那会可是全网都找不到这个版本的教程啊,官网的也不是很清楚,我被折磨了好久才搞定

好好好,放下你的砖头,我说我说!!!!

由于楼主用的时候,spring还没整合7.8.0的ES,所以楼主用的原生ES,建议如果spring没有整合,不要强制指定版本,因为可能会出未知错误,这些错误可能是不兼容,可能是其他方面,属于不可控范围,且排查极难

上重点!!!

第一步,要用ES,就得需要依赖,此处建议导入三个依赖(楼主很不幸,遇到了依赖问题,原因是只导入了官网提供的一个高级客户端依赖,没有低级依赖以及核心依赖)

        
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            7.8.0
        
        
            org.elasticsearch.client
            elasticsearch-rest-client
            7.8.0
        
        
            org.elasticsearch
            elasticsearch
            7.8.0
        

对了,这块需要一个客户端,我们采用官方推荐的高级客户端,集群的话就写多个,单点的话就写一个



RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));

第二步,上API,ES本身也是提供了一些API类,可以实现我们对ES的操作,注:出现的所有名字为client的对象都是ES的RestHighLevelClient ,请求方式都是RequestOptions.DEFAULT

创建索引:

CreateIndexRequest request = new CreateIndexRequest("索引名");
client.indices().create(request,RequestOptions.DEFAULT);

获取索引:

/*
*    调用方法如果是exists,是判断是否存在,如果是get,那就是获取
*/
GetIndexRequest request = new GetIndexRequest("索引名");
restHighLevelClient.indices().exists(request,RequestOptions.DEFAULT);

删除索引:

 DeleteIndexRequest request = new DeleteIndexRequest("索引名");
 restHighLevelClient.indices().delete(request,RequestOptions.DEFAULT);

添加文档:

IndexRequest request = new IndexRequest("索引名");
request.id("id");
request.source("json",XContentType.JSON);
restHighLevelClient.index(request,RequestOptions.DEFAULT);

获取文档:

/*
*    获取文档是否存在
*/
GetRequest request = new GetRequest("索引名", "id");
restHighLevelClient.exists(request, RequestOptions.DEFAULT);

/*
*    获取文档
*/
GetRequest request = new GetRequest("索引名", "id");
restHighLevelClient.get(request, RequestOptions.DEFAULT);

更新文档:

UpdateRequest request = new UpdateRequest("索引名", "id");
request.id("id");
request.doc("json",XContentType.JSON);
restHighLevelClient.update(request,RequestOptions.DEFAULT);

删除文档:

DeleteRequest request = new DeleteRequest("索引名", "id");
restHighLevelClient.delete(request,RequestOptions.DEFAULT);

以上就是ES的基本API类、方法,接下来是我们在项目中很可能用到的-------批量处理,以批量插入为例,其他的批量删除啥的都是一样的

BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add()
    
    
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList userList = new ArrayList<>();
for (int i = 0; i < userList.size(); i++) {
 //批量更新删除
bulkRequest.add(new IndexRequest("索引名").id("自定义ID,不定义的话可以不调用这个.id方法") .source(JSON.toJSONString(userList.get(i)),XContentType.JSON));
}
        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);

批量插入的类就是BulkRequest ,但是有一个地方有的朋友可能会有疑问,source,这个格式是什么,上面我写的是json,但其实它不仅仅可以用json,map也可以哦~,比如:

Map map = new HashMap<>();
//TODO 对map处理
/*
*    自己指定可以指定ID,也可以不指定,不指定ID的话,就不要用这个.id方法哦
*/
 request.add(new IndexRequest("索引名").id("自己指定ID").source(map));

本次分享就到这里啦~ 下一篇给大家讲Bulk的弊端,以及对应解决方案---BulkProcessor 

你可能感兴趣的:(java日常分享,elasticsearch相关,elasticsearch,java,API,bulk,ES批量处理)