elasticsearch java api 汇总

本文详细介绍了Elasticsearch的各种操作,包括集群连接方式、文档的增删改查、多种检索技巧及高级查询方法,并深入探讨了管理和维护API的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录(?)[-]

  1. 1 集群的连接
    1. 11 作为Elasticsearch节点
    2. 12 使用Transport连接
  2. 2 文档的CRUD
    1. 21 查询文档
    2. 22 索引文档
    3. 23 更新文档
    4. 24 删除文档
  3. 3 Elasticsearch检索
    1. 31 Preparing a query
    2. 32 Building queries
    3. 33 Using the match all documents query
    4. 34 The match query
    5. 35 Using the geo shape query
    6. 36 Paging query
    7. 37 Sorting
    8. 38 Filtering
    9. 39 Faceting
    10. 310 Highlighting
    11. 311 Suggestions
    12. 312 Counting
    13. 313 Scrolling
    14. 314 Bulk
    15. 315 The delete by query
    16. 316 Multi GET
    17. 3316 Multi Search
    18. 317 Building JSON queries and documents
  4. 4 The administration API
    1. 41 The cluster administration API
      1. 411 The cluster and indices health API
      2. 412 The cluster state API
      3. 413 The update settings API
      4. 414 The reroute API
      5. 415 The nodes information API
      6. 416 The node statistics API
      7. 417 The nodes hot threads API
      8. 418 The nodes shutdown API
      9. 419 The search shards API
    2. 42 The Indices administration API
      1. 421 The index existence API
      2. 422 The Type existence API
      3. 423 The indices stats API
      4. 3424 Index status
      5. 425 Segments information API
      6. 426 Creating an index API
      7. 427 Deleting an index
      8. 428 Closing an index
      9. 429 Opening an index
      10. 4210 The Refresh API
      11. 4211 The Flush API
      12. 4212 The Optimize API
      13. 34213 The put mapping API
      14. 4214 The delete mapping API
      15. 34215 The gateway snapshot API
      16. 4216 The aliases API
      17. 4217 The get aliases API
      18. 4218 The aliases exists API
      19. 4219 The clear cache API
      20. 34220 The update settings API
      21. 4221 The analyze API
      22. 4222 The put template API
      23. 34223 The delete template API
      24. 4224 The validate query API
      25. 4225 The put warmer API
      26. 4226 The delete warmer API

3.1 集群的连接

3.1.1 作为Elasticsearch节点

[html]  view plain  copy
  1. 代码:  
  2. import static org.elasticsearch.node.NodeBuilder.nodeBuilder;  
  3. import org.elasticsearch.client.Client;  
  4. import org.elasticsearch.node.Node;  
  5.   
  6. Node node = nodeBuilder().clusterName("escluster2").client(true).  
  7. node();  
  8. Client client = node.client();  

3.1.2 使用Transport连接

[html]  view plain  copy
  1. 代码:  
  2. import org.elasticsearch.client.transport.TransportClient;  
  3. import org.elasticsearch.common.settings.ImmutableSettings;  
  4. import org.elasticsearch.common.settings.Settings;   
  5. import org.elasticsearch.common.transport.InetSocketTransportAddress;  
  6.   
  7. Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "escluster2").build();  
  8. TransportClient client = new TransportClient(settings);  
  9. client.addTransportAddress(new InetSocketTransportAddress("127.0.0.1",9300));  

3.2 文档的CRUD

3.2.1 查询文档

[java]  view plain  copy
  1. 代码:  
  2. GetResponse response = client.prepareGet("library""book""1")  
  3. .setFields("title""_source")  
  4. .execute().actionGet();  


3.2.2 索引文档

[java]  view plain  copy
  1. 代码:  
  2. import org.elasticsearch.action.index.IndexResponse;  
  3. import org.elasticsearch.client.Client;  
  4.   
  5. IndexResponse response = client.prepareIndex("library""book""2")  
  6. .setSource("{ \"title\": \"Mastering ElasticSearch\"}")  
  7. .execute().actionGet();  

3.2.3 更新文档

[java]  view plain  copy
  1. 代码:  
  2. import org.elasticsearch.action.update.UpdateResponse;  
  3. import org.elasticsearch.client.Client;  
  4. import java.util.Map;  
  5. import org.elasticsearch.common.collect.Maps;  
  6.   
  7. Map<String, Object> params = Maps.newHashMap();  
  8. params.put("ntitle""ElasticSearch Server Book");  
  9. UpdateResponse response = client.prepareUpdate("library""book""2")  
  10. .setScript("ctx._source.title = ntitle")  
  11. .setScriptParams(params)  
  12. .execute().actionGet();  

3.2.4 删除文档

[java]  view plain  copy
  1. 代码:  
  2. import org.elasticsearch.action.delete.DeleteResponse;  
  3. import org.elasticsearch.client.Client;  
  4.   
  5. DeleteResponse response = client.prepareDelete("library""book""2")  
  6. .execute().actionGet();  

3.3 Elasticsearch检索

3.3.1 Preparing a query

[java]  view plain  copy
  1. 代码:  
  2. import org.elasticsearch.action.search.SearchResponse;  
  3. import org.elasticsearch.client.Client;  
  4. import org.elasticsearch.search.SearchHit;  
  5.   
  6. SearchResponse response = client.prepareSearch("library")  
  7. .addFields("title""_source")  
  8. .execute().actionGet();  
  9. for(SearchHit hit: response.getHits().getHits()) {  
  10. <span style="white-space:pre">    </span>System.out.println(hit.getId());  
  11. <span style="white-space:pre">    </span>if (hit.getFields().containsKey("title")) {  
  12. <span style="white-space:pre">        </span>System.out.println("field.title: "+ hit.getFields().get("title").getValue());  
  13. <span style="white-space:pre">    </span>}  
  14. <span style="white-space:pre">    </span>System.out.println("source.title: " + hit.getSource().get("title"));  
  15. }  



3.3.2 Building queries

[java]  view plain  copy
  1. 代码:  
  2. import org.elasticsearch.index.query.QueryBuilder;  
  3. import org.elasticsearch.index.query.QueryBuilders;  
  4.   
  5. QueryBuilder queryBuilder = QueryBuilders  
  6. .disMaxQuery()  
  7. .add(QueryBuilders.termQuery("title""Elastic"))  
  8. .add(QueryBuilders.prefixQuery("title""el"));  
  9. System.out.println(queryBuilder.toString());  
  10. SearchResponse response = client.prepareSearch("library")  
  11. .setQuery(queryBuilder)  
  12. .execute().actionGet();  

3.3.3 Using the match all documents query

[java]  view plain  copy
  1. 代码:  
  2. queryBuilder = QueryBuilders.matchAllQuery()  
  3. .boost(11f).normsField("title");  

3.3.4 The match query

[java]  view plain  copy
  1. 代码:  
  2. queryBuilder = QueryBuilders  
  3. .matchQuery("message""a quick brown fox")  
  4. .operator(Operator.AND)  
  5. .zeroTermsQuery(ZeroTermsQuery.ALL);  

3.3.5 Using the geo shape query

[java]  view plain  copy
  1. 代码:  
  2. queryBuilder = QueryBuilders.geoShapeQuery("location",  
  3. ShapeBuilder.newRectangle()  
  4. .topLeft(1353)  
  5. .bottomRight(1452)  
  6. .build());  

3.3.6 Paging query

[java]  view plain  copy
  1. 代码:  
  2. SearchResponse response = client.prepareSearch("library")  
  3. .setQuery(QueryBuilders.matchAllQuery())  
  4. .setFrom(10)  
  5. .setSize(20)  
  6. .execute().actionGet();  

3.3.7 Sorting

[java]  view plain  copy
  1. 代码:  
  2. SearchResponse response = client.prepareSearch("library")  
  3. .setQuery(QueryBuilders.matchAllQuery())  
  4. .addSort(SortBuilders.fieldSort("title"))  
  5. .addSort("_score", SortOrder.DESC)  
  6. .execute().actionGet()  

3.3.8 Filtering

[java]  view plain  copy
  1. 代码:  
  2. FilterBuilder filterBuilder = FilterBuilders  
  3. .andFilter(  
  4. FilterBuilders.existsFilter("title").filterName("exist"),  
  5. FilterBuilders.termFilter("title""elastic")  
  6. );  
  7. SearchResponse response = client.prepareSearch("library")  
  8. .setFilter(filterBuilder)  
  9. .execute().actionGet();  


3.3.9 Faceting

[java]  view plain  copy
  1. 代码:  
  2. FacetBuilder facetBuilder = FacetBuilders  
  3. .filterFacet("test")  
  4. .filter(FilterBuilders.termFilter("title""elastic"));  
  5. SearchResponse response = client.prepareSearch("library")  
  6. .addFacet(facetBuilder)  
  7. .execute().actionGet();  


3.3.10 Highlighting

[java]  view plain  copy
  1. 代码:  
  2. SearchResponse response = client.prepareSearch("wikipedia")  
  3. .addHighlightedField("title")  
  4. .setQuery(QueryBuilders.termQuery("title""actress"))  
  5. .setHighlighterPreTags("<1>""<2>")  
  6. .setHighlighterPostTags("</1>""</2>")  
  7. .execute().actionGet();  
  8. for(SearchHit hit: response.getHits().getHits()) {  
  9. <span style="white-space:pre">    </span>HighlightField hField = hit.getHighlightFields().get("title");  
  10. <span style="white-space:pre">    </span>for (Text t : hField.fragments()) {  
  11. <span style="white-space:pre">        </span>System.out.println(t.string());  
  12. <span style="white-space:pre">    </span>}  
  13. }  

3.3.11 Suggestions

[java]  view plain  copy
  1. 代码:  
  2. SearchResponse response = client.prepareSearch("wikipedia")  
  3. .setQuery(QueryBuilders.matchAllQuery())  
  4. .addSuggestion(new TermSuggestionBuilder("first_suggestion")  
  5. .text("graphics designer")  
  6. .field("_all"))  
  7. .execute().actionGet();  
  8.   
  9. for( Entry<? extends Option> entry : response.getSuggest().getSuggestion("first_suggestion").getEntries()) {  
  10. <span style="white-space:pre">    </span>System.out.println("Check for: " + entry.getText() + ". Options:");  
  11. <span style="white-space:pre">    </span>for( Option option : entry.getOptions()) {  
  12. <span style="white-space:pre">        </span>System.out.println("\t" + option.getText());  
  13. <span style="white-space:pre">    </span>}  
  14. }  

3.3.12 Counting

[java]  view plain  copy
  1. 代码:  
  2. CountResponse response = client.prepareCount("library")  
  3. .setQuery(QueryBuilders.termQuery("title""elastic"))  
  4. .execute().actionGet();  

3.3.13 Scrolling

[java]  view plain  copy
  1. 代码:  
  2. SearchResponse responseSearch = client.prepareSearch("library")  
  3. .setScroll("1m")  
  4. .setSearchType(SearchType.SCAN)  
  5. .execute().actionGet();  
  6. String scrollId = responseSearch.getScrollId();  
  7. SearchResponse response = client.prepareSearchScroll(scrollId).execute().actionGet();  

3.3.14 Bulk

[java]  view plain  copy
  1. 代码:  
  2. BulkResponse response = client.prepareBulk()  
  3. .add(client.prepareIndex("library""book""5")  
  4. .setSource("{ \"title\" : \"Solr Cookbook\"}")  
  5. .request())  
  6. .add(client.prepareDelete("library""book""2").request()).execute().actionGet();  

3.3.15 The delete by query

[java]  view plain  copy
  1. 代码:  
  2. DeleteByQueryResponse response = client.prepareDeleteByQuery("library")  
  3. .setQuery(QueryBuilders.termQuery("title""ElasticSearch"))  
  4. .execute().actionGet();  


3.3.16 Multi GET

[java]  view plain  copy
  1. 代码:  
  2. MultiGetResponse response = client.prepareMultiGet()  
  3. .add("library""book""1""2")  
  4. .execute().actionGet();  


3.3.16 Multi Search

[java]  view plain  copy
  1. 代码:  
  2. MultiSearchResponse response = client.prepareMultiSearch()  
  3. .add(client.prepareSearch("library""book").request())  
  4. .add(client.prepareSearch("news").  
  5. .setFilter(FilterBuilders.termFilter("tags""important")))  
  6. .execute().actionGet();  


3.3.17 Building JSON queries and documents

[java]  view plain  copy
  1. 代码:  
  2. IndexResponse response = client  
  3. .prepareIndex("library""book""2")  
  4. .setSource("{ \"title\": \"Mastering ElasticSearch\"}")  
  5. .execute().actionGet();  
  6.   
  7. Map<String, Object> m = Maps.newHashMap();  
  8. m.put("1""Introduction");  
  9. m.put("2""Basics");  
  10. m.put("3""And the rest");  
  11. XContentBuilder json = XContentFactory.jsonBuilder().prettyPrint()  
  12. .startObject()  
  13. .field("id").value("2123")  
  14. .field("lastCommentTime"new Date())  
  15. .nullField("published")  
  16. .field("chapters").map(m)  
  17. .field("title""Mastering ElasticSearch")  
  18. .array("tags""search""ElasticSearch""nosql")  
  19. .field("values")  
  20. .startArray()  
  21. .value(1)  
  22. .value(10)  
  23. .endArray()  
  24. .endObject();  

3.4 The administration API

3.4.1 The cluster administration API

3.4.1.1 The cluster and indices health API

[java]  view plain  copy
  1. 代码:  
  2. ClusterHealthResponse response = client.admin().cluster()  
  3. .prepareHealth("library")  
  4. .execute().actionGet();  

3.4.1.2 The cluster state API

[java]  view plain  copy
  1. 代码:  
  2. ClusterStateResponse response = client.admin().cluster()  
  3. .prepareState()  
  4. .execute().actionGet();  

3.4.1.3 The update settings API

[java]  view plain  copy
  1. 代码:  
  2. Map<String, Object> map = Maps.newHashMap();  
  3. map.put("indices.ttl.interval""10m");  
  4. ClusterUpdateSettingsResponse response = client.admin().cluster()  
  5. .prepareUpdateSettings()  
  6. .setTransientSettings(map)  
  7. .execute().actionGet();  

3.4.1.4 The reroute API

[java]  view plain  copy
  1. 代码:  
  2. ClusterRerouteResponse response = client.admin().cluster()  
  3. .prepareReroute()  
  4. .setDryRun(true)  
  5. .add(new MoveAllocationCommand(new ShardId("library"3), "G3czOt4HQbKZT1RhpPCULw",PvHtEMuRSJ6rLJ27AW3U6w"),  
  6.      new CancelAllocationCommand(new ShardId("library"2), "G3czOt4HQbKZT1RhpPCULw",rue))  
  7. .execute().actionGet();  

3.4.1.5 The nodes information API

[java]  view plain  copy
  1. 代码:  
  2. NodesInfoResponse response = client.admin().cluster()  
  3. .prepareNodesInfo()  
  4. .setNetwork(true)  
  5. .setPlugin(true)  
  6. .execute().actionGet();  

3.4.1.6 The node statistics API

[java]  view plain  copy
  1. 代码:  
  2. NodesStatsResponse response = client.admin().cluster()  
  3. .prepareNodesStats()  
  4. .all()  
  5. .execute().actionGet();  

3.4.1.7 The nodes hot threads API

[java]  view plain  copy
  1. 代码:  
  2. NodesHotThreadsResponse response = client.admin().cluster()  
  3. .prepareNodesHotThreads()  
  4. .execute().actionGet();  

3.4.1.8 The nodes shutdown API

[java]  view plain  copy
  1. 代码:  
  2. NodesShutdownResponse response = client.admin().cluster()  
  3. .prepareNodesShutdown()  
  4. .execute().actionGet();  

3.4.1.9 The search shards API

[java]  view plain  copy
  1. 代码:  
  2. ClusterSearchShardsResponse response = client.admin().cluster()  
  3. .prepareSearchShards()  
  4. .setIndices("library")  
  5. .setRouting("12")  
  6. .execute().actionGet();  

3.4.2 The Indices administration API

3.4.2.1 The index existence API

[java]  view plain  copy
  1. 代码:  
  2. IndicesExistsResponse response = client.admin().indices()  
  3. .prepareExists("books""library")  
  4. .execute().actionGet();  


3.4.2.2 The Type existence API

[java]  view plain  copy
  1. 代码:  
  2. TypesExistsResponse response = client.admin().indices()  
  3. .prepareTypesExists("library")  
  4. .setTypes("book")  
  5. .execute().actionGet();  


3.4.2.3 The indices stats API

[java]  view plain  copy
  1. 代码:  
  2. IndicesStatsResponse response = client.admin().indices()  
  3. .prepareStats("library")  
  4. .all()  
  5. .execute().actionGet();  


3.4.2.4 Index status

[java]  view plain  copy
  1. 代码:  
  2. IndicesStatusResponse response = client.admin().indices()  
  3. .prepareStatus("library")  
  4. .setRecovery(true)  
  5. .setSnapshot(true)  
  6. .execute().actionGet();  


3.4.2.5 Segments information API

[java]  view plain  copy
  1. 代码:  
  2. IndicesSegmentResponse response = client.admin().indices()  
  3. .prepareSegments("library")  
  4. .execute().actionGet();  


3.4.2.6 Creating an index API

[java]  view plain  copy
  1. 代码:  
  2. CreateIndexResponse response = client.admin().indices()  
  3. .prepareCreate("news")  
  4. .setSettings(ImmutableSettings.settingsBuilder()  
  5. .put("number_of_shards"1))  
  6. .addMapping("news", XContentFactory.jsonBuilder()  
  7. .startObject()  
  8. .startObject("news")  
  9. .startObject("properties")  
  10. .startObject("title")  
  11. .field("analyzer""whitespace")  
  12. .field("type""string")  
  13. .endObject()  
  14. .endObject()  
  15. .endObject()  
  16. .endObject())  
  17. .execute().actionGet();  


3.4.2.7 Deleting an index

[java]  view plain  copy
  1. 代码:  
  2. DeleteIndexResponse response = client.admin().indices()  
  3. .prepareDelete("news")  
  4. .execute().actionGet();  


3.4.2.8 Closing an index

[java]  view plain  copy
  1. 代码:  
  2. CloseIndexResponse response = client.admin().indices()  
  3. .prepareClose("library")  
  4. .execute().actionGet();  


3.4.2.9 Opening an index

[java]  view plain  copy
  1. 代码:  
  2. OpenIndexResponse response = client.admin().indices()  
  3. .prepareOpen("library")  
  4. .execute().actionGet();  


3.4.2.10 The Refresh API

[java]  view plain  copy
  1. 代码:  
  2. RefreshResponse response = client.admin().indices()  
  3. .prepareRefresh("library")  
  4. .execute().actionGet();  


3.4.2.11 The Flush API

[java]  view plain  copy
  1. 代码:  
  2. FlushResponse response = client.admin().indices()  
  3. .prepareFlush("library")  
  4. .setFull(false)  
  5. .execute().actionGet();  


3.4.2.12 The Optimize API

[java]  view plain  copy
  1. 代码:  
  2. OptimizeResponse response = client.admin().indices()  
  3. .prepareOptimize("library")  
  4. .setMaxNumSegments(2)  
  5. .setFlush(true)  
  6. .setOnlyExpungeDeletes(false)  
  7. .execute().actionGet();  


3.4.2.13 The put mapping API

[java]  view plain  copy
  1. 代码:  
  2. PutMappingResponse response = client.admin().indices()  
  3. .preparePutMapping("news")  
  4. .setType("news")  
  5. .setSource(XContentFactory.jsonBuilder()  
  6. .startObject()  
  7. .startObject("news")  
  8. .startObject("properties")  
  9. .startObject("title")  
  10. .field("analyzer""whitespace")  
  11. .field("type""string")  
  12. .endObject()  
  13. .endObject()  
  14. .endObject()  
  15. .endObject())  
  16. .execute().actionGet();  


3.4.2.14 The delete mapping API

[java]  view plain  copy
  1. 代码:  
  2. DeleteMappingResponse response = client.admin().indices()  
  3. .prepareDeleteMapping("news")  
  4. .setType("news")  
  5. .execute().actionGet();  


3.4.2.15 The gateway snapshot API

[java]  view plain  copy
  1. 代码:  
  2. GatewaySnapshotResponse response = client.admin().indices()  
  3. .prepareGatewaySnapshot("news")  
  4. .execute().actionGet();  

3.4.2.16 The aliases API

[java]  view plain  copy
  1. 代码:  
  2. IndicesAliasesResponse response = client.admin().indices()  
  3. .prepareAliases()  
  4. .addAlias("news""n")  
  5. .addAlias("library""elastic_books",   
  6. FilterBuilders.termFilter("title""elasticsearch"))  
  7. .removeAlias("news""current_news")  
  8. .execute().actionGet();  


3.4.2.17 The get aliases API

[java]  view plain  copy
  1. 代码:  
  2. IndicesGetAliasesResponse response = client.admin().indices()  
  3. .prepareGetAliases("elastic_books""n")  
  4. .execute().actionGet();  


3.4.2.18 The aliases exists API

[java]  view plain  copy
  1. 代码:  
  2. AliasesExistResponse response = client.admin().indices()  
  3. .prepareAliasesExist("elastic*""unknown")  
  4. .execute().actionGet();  


3.4.2.19 The clear cache API

[java]  view plain  copy
  1. 代码:  
  2. ClearIndicesCacheResponse response = client.admin().indices()  
  3. .prepareClearCache("library")  
  4. .setFieldDataCache(true)  
  5. .setFields("title")  
  6. .setFilterCache(true)  
  7. .setIdCache(true)  
  8. .execute().actionGet();  


3.4.2.20 The update settings API

[java]  view plain  copy
  1. 代码:  
  2. UpdateSettingsResponse response = client.admin().indices()  
  3. .prepareUpdateSettings("library")  
  4. .setSettings(ImmutableSettings.builder()  
  5. .put("index.number_of_replicas"2))  
  6. .execute().actionGet();  


3.4.2.21 The analyze API

[java]  view plain  copy
  1. 代码:  
  2. AnalyzeResponse response = client.admin().indices()  
  3. .prepareAnalyze("library""ElasticSearch Servers")  
  4. .setTokenizer("whitespace")  
  5. .setTokenFilters("nGram")  
  6. .execute().actionGet();  


3.4.2.22 The put template API

[java]  view plain  copy
  1. 代码:  
  2. PutIndexTemplateResponse response = client.admin().indices()  
  3. .preparePutTemplate("my_template")  
  4. .setTemplate("product*")  
  5. .setSettings(ImmutableSettings.builder()  
  6. .put("index.number_of_replicas"2)  
  7. .put("index.number_of_shards"1))  
  8. .addMapping("item", XContentFactory.jsonBuilder()  
  9. .startObject()  
  10. .startObject("item")  
  11. .startObject("properties")  
  12. .startObject("title")  
  13. .field("type""string")  
  14. .endObject()  
  15. .endObject()  
  16. .endObject()  
  17. .endObject())  
  18. .execute().actionGet();  


3.4.2.23 The delete template API

[java]  view plain  copy
  1. 代码:  
  2. DeleteIndexTemplateResponse response = client.admin().indices()  
  3. .prepareDeleteTemplate("my_*")  
  4. .execute().actionGet();  


3.4.2.24 The validate query API

[java]  view plain  copy
  1. 代码:  
  2. ValidateQueryResponse response = client.admin().indices()  
  3. .prepareValidateQuery("library")  
  4. .setExplain(true)  
  5. .setQuery(XContentFactory.jsonBuilder()  
  6. .startObject()  
  7. .field("name").value("elastic search")  
  8. .endObject().bytes())  
  9. .execute().actionGet();  

3.4.2.25 The put warmer API

[java]  view plain  copy
  1. 代码:  
  2. PutWarmerResponse response = client.admin().indices()  
  3. .preparePutWarmer("library_warmer")  
  4. .setSearchRequest(client.prepareSearch("library")  
  5. .addFacet(FacetBuilders  
  6. .termsFacet("tags").field("tags")))  
  7. .execute().actionGet();  

3.4.2.26 The delete warmer API

[java]  view plain  copy
  1. 代码:  
  2. DeleteWarmerResponse response = client.admin().indices()  
  3. .prepareDeleteWarmer()  
  4. .setName("library_*")  
  5. .execute().actionGet();  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值