RestHighLevelClient操作Elasticsearch同步操作

这篇博客详细介绍了如何使用RestHighLevelClient操作Elasticsearch,包括创建索引、判断索引存在、插入和查询单个及批量文档、更新文档、删除文档等核心功能,涵盖了基本的增删查改操作。
摘要由CSDN通过智能技术生成

RestHighLevelClient整理

1. 创建索引

		CreateIndexRequest request = new CreateIndexRequest(indexName) ;
        //一个分片 一个备份
        request.settings(Settings.builder().put("index.number_of_shards" , 1).put("index.number_of_replicas" , 1));
        //配置mappings
        Map<String,Object> map = new HashMap<>(16) ;
		//properties 名称不变
        Map<String,Object> properties = new HashMap<>(16);
        Map<String,Object> field1 = new HashMap<>(16);
        field1.put("type" , "text") ;
        Map<String,Object> field2 = new HashMap<>(16);
        field2.put("type" , "text") ;
	    properties.put("field1" , field1) ;
        properties.put("field2" , field2) ;
        map.put("properties" , properties) ;
        request.mapping(map) ;
        CreateIndexResponse response = this.restHighLevelClient.indices().create(request , RequestOptions.DEFAULT) ;
        boolean acknowledged = response.isAcknowledged();

2. 判断索引是否存在

GetIndexRequest request = new GetIndexRequest(indexName);
return this.restHighLevelClient.indices().exists(request , RequestOptions.DEFAULT);

3. 插入单个文档

		IndexRequest request = new IndexRequest(indexName)
                .id(String.valueOf(apiImportData.getId()))
                .timeout(TimeValue.timeValueSeconds(time))
                .source(jacksonToString(apiImportData) , XContentType.JSON) ;
        IndexResponse response = restHighLevelClient.index(request , RequestOptions.DEFAULT) ;
        return response.status().toString() ; //如果正常 返回OK

4. 批量插入文档

		BulkRequest request = new BulkRequest(this.indexName);
        request.timeout(TimeValue.timeValueSeconds(list.size()));
        for (Model model : list) {
            request.add(
                    new IndexRequest(this.indexName).id(model.getId())
                    .source(JacksonUtil.toJson(model) , XContentType.JSON)
            );
        }
        BulkResponse response = this.client.bulk(request , RequestOptions.DEFAULT);

5. 判断单个文档是否存在

		GetRequest request = new GetRequest(indexName , id) ;
        request.fetchSourceContext(new FetchSourceContext(false)) ;
        // 不选择获取字段
        request.storedFields("_none_") ;
        return this.restHighLevelClient.exists(request , RequestOptions.DEFAULT);

6. 查询单个文档(通过id)

		GetRequest request = new GetRequest(indexName , id) ;
        GetResponse response = restHighLevelClient.get(request , RequestOptions.DEFAULT);
        return objectMapper.readValue(response.getSource().toString() , ApiImportData.class) ;

7. 匹配查询

		SearchRequest request = new SearchRequest(indexName) ;
        SearchSourceBuilder builder = new SearchSourceBuilder()
                .from(from)
                .size(size);//类似于mysql中的 limit
		//bool 多匹配查询、可以使用should(类似于or)、must(类似于and)
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
		//这里是should中多匹配字段
		//match匹配,主要是field是text类型,尽量采用分词匹配查询(field内容被分成多个词,所以不能采用模糊查询)
		//term匹配是精准匹配,主要是针对keyword查询,可以进行模糊查询
        boolQueryBuilder.should(new MatchQueryBuilder("field1" , field1))
                    .should(new MatchQueryBuilder("field2" , field2)) ;
		RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("time");
		rangeQueryBuilder.gte(dto.getStartTime().getTime());
		rangeQueryBuilder.lte(dto.getEndTime().getTime());
		boolQueryBuilder.filter(rangeQueryBuilder);
		builder.query(boolQueryBuilder) ;
		//高亮暂时不好使	
        HighlightBuilder highlightBuilder = new HighlightBuilder() ;
        HighlightBuilder.Field field1 = new HighlightBuilder.Field("field1") ;
        HighlightBuilder.Field field2 = new HighlightBuilder.Field("field2");
        highlightBuilder.field(field1);
        highlightBuilder.field(field2);
        builder.highlighter(highlightBuilder) ;

		request.source(builder) ;
        SearchResponse response = this.restHighLevelClient.search(request , RequestOptions.DEFAULT) ;
       SearchHit[] hits = response.getHits().getHits();

8. 更新单个文档

		UpdateRequest request = new UpdateRequest(indexName, String.valueOf(apiImportData.getId())) ;
        request.timeout(TimeValue.timeValueSeconds(1));
        System.out.println(jacksonToString(apiImportData));
		//json序列化的时候,默认值和null不要json化
        request.doc(jacksonToString(apiImportData) , XContentType.JSON);
        UpdateResponse response = this.restHighLevelClient.update(request , RequestOptions.DEFAULT) ;

9. 批量更新文档

		BulkRequest request = new BulkRequest(this.indexName) ;
        request.timeout(TimeValue.timeValueSeconds(list.size()));
        for (Model model : list) {
            request.add(new UpdateRequest(this.indexName , model.getId())
                    .doc(JacksonUtil.toJson(model)));
        }
        BulkResponse response = this.client.bulk(request , RequestOptions.DEFAULT);

10. 删除单个文档(通过id)

		DeleteRequest request = new DeleteRequest(this.indexName , id);
        request.timeout(TimeValue.timeValueSeconds(1));
        DeleteResponse response = this.client.delete(request , RequestOptions.DEFAULT);

11. 批量删除文档

		BulkRequest request = new BulkRequest(this.indexName);
        request.timeout(TimeValue.timeValueSeconds(ids.size()));
        for (String id : ids) {
            request.add(new DeleteRequest(this.indexName , id));
        }
        BulkResponse response = this.client.bulk(request , RequestOptions.DEFAULT);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值