国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

552、Elasticsearch詳細(xì)入門教程系列 -【分布式全文搜索引擎 Elasticsearch(三)】 2023.05.19

這篇具有很好參考價(jià)值的文章主要介紹了552、Elasticsearch詳細(xì)入門教程系列 -【分布式全文搜索引擎 Elasticsearch(三)】 2023.05.19。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、Elasticsearch——使用Java API實(shí)現(xiàn)ES中的索引、映射、文檔操作

1.1 簡(jiǎn)單介紹

之前是對(duì)ES中的創(chuàng)建/查看/刪除索引、創(chuàng)建定義映射、創(chuàng)建/查看/修改/刪除文檔的這些操作有了一定的了解認(rèn)識(shí),但是是通過Postman + JSON串的方法來實(shí)現(xiàn)的
那么之后仍然是對(duì)ES中的索引、映射、文檔進(jìn)行操作,只是方法換成了Java API。

1.2 案例詳情

首先需要?jiǎng)?chuàng)建一個(gè)maven工程,必然要添加ES相關(guān)的依賴。
同時(shí)雙擊ES安裝目錄的bin目錄下的 elasticsearch.bat ,先啟動(dòng)ES服務(wù)端。

  • pom文件
       <dependency>
           <groupId>org.elasticsearch</groupId>
           <artifactId>elasticsearch</artifactId>
           <version>7.8.0</version>
       </dependency>
       <!-- elasticsearch 的客戶端 -->
       <dependency>
           <groupId>org.elasticsearch.client</groupId>
           <artifactId>elasticsearch-rest-high-level-client</artifactId>
           <version>7.8.0</version>
       </dependency>
       <!-- elasticsearch 依賴 2.x 的 log4j -->
       <dependency>
           <groupId>org.apache.logging.log4j</groupId>
           <artifactId>log4j-api</artifactId>
           <version>2.8.2</version>
       </dependency>
       <dependency>
           <groupId>org.apache.logging.log4j</groupId>
           <artifactId>log4j-core</artifactId>
           <version>2.8.2</version>
       </dependency>
       <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-databind</artifactId>
           <version>2.9.9</version>
       </dependency>
       <!-- junit 單元測(cè)試 -->
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.12</version>
       </dependency>
1.2.1 創(chuàng)建ES客戶端:完成與ES服務(wù)端連接

后邊都是按照這個(gè)模板代碼來的

package com.szh.es;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

import java.io.IOException;

/**
*
*/
public class ESTestClient {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.2 創(chuàng)建索引
//創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //創(chuàng)建索引 --- 請(qǐng)求對(duì)象
       CreateIndexRequest request = new CreateIndexRequest("user");
       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       CreateIndexResponse response = esClient.indices().create(request, RequestOptions.DEFAULT);

       //響應(yīng)狀態(tài)
       boolean acknowledged = response.isAcknowledged();
       System.out.println("索引操作:" + acknowledged);

       //關(guān)閉ES客戶端
       esClient.close();
1.2.3 查看索引

public class ESTestIndexSearch {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //查詢索引 --- 請(qǐng)求對(duì)象
       GetIndexRequest request = new GetIndexRequest("user");
       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       GetIndexResponse response = esClient.indices().get(request, RequestOptions.DEFAULT);

       //響應(yīng)狀態(tài)
       System.out.println(response.getAliases());
       System.out.println(response.getMappings());
       System.out.println(response.getSettings());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.4 刪除索引

public class ESTestIndexDelete {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //刪除索引 --- 請(qǐng)求對(duì)象
       DeleteIndexRequest request = new DeleteIndexRequest("user");
       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       AcknowledgedResponse response = esClient.indices().delete(request,RequestOptions.DEFAULT);

       //響應(yīng)狀態(tài)
       System.out.println(response.isAcknowledged());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}

1.2.5 創(chuàng)建文檔

索引有了,就相當(dāng)于有了數(shù)據(jù)庫。接下來就需要向數(shù)據(jù)庫中建表、添加數(shù)據(jù)。建表自然要有表結(jié)構(gòu)(有哪些屬性、這些屬性分別都是什么數(shù)據(jù)類型),也就是ES中的映射,在Java代碼中就可以采用實(shí)體類來實(shí)現(xiàn)。

public class User {

   private String name;
   private String sex;
   private Integer age;

   //getter and setter
}
public class ESTestDocInsert {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //創(chuàng)建文檔 --- 請(qǐng)求對(duì)象
       IndexRequest request = new IndexRequest();
       //設(shè)置索引及索引中文檔的唯一性標(biāo)識(shí)id(如果不指定,則ES會(huì)默認(rèn)隨機(jī)生成一個(gè)id)
       request.index("user").id("1001");

       //創(chuàng)建數(shù)據(jù)對(duì)象(文檔內(nèi)容)
       User user = new User();
       user.setName("張起靈");
       user.setSex("man");
       user.setAge(21);

       //向ES中插入數(shù)據(jù),必須將數(shù)據(jù)格式轉(zhuǎn)換為JSON
       ObjectMapper objectMapper = new ObjectMapper();
       String userJson = objectMapper.writeValueAsString(user);
       request.source(userJson, XContentType.JSON);

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
       System.out.println(response.getResult());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.6 修改文檔
public class ESTestDocUpdate {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //修改文檔 --- 請(qǐng)求對(duì)象
       UpdateRequest request = new UpdateRequest();
       //配置修改參數(shù) --- 表示要修改user索引中id為1001的文檔內(nèi)容
       request.index("user").id("1001");
       //將修改后的內(nèi)容,以JSON格式寫入請(qǐng)求體中
       request.doc(XContentType.JSON,"age",18);

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       UpdateResponse response = esClient.update(request,RequestOptions.DEFAULT);
       System.out.println(response.getResult());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.7 查看文檔
public class ESTestDocSearch {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //查詢文檔 --- 請(qǐng)求對(duì)象
       GetRequest request = new GetRequest();
       //設(shè)置請(qǐng)求參數(shù) --- 表示要查詢user索引中id為1001的文檔內(nèi)容
       request.index("user").id("1001");

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       GetResponse response = esClient.get(request,RequestOptions.DEFAULT);
       System.out.println(response.getSourceAsString());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.8 刪除文檔
public class ESTestDocDelete {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //刪除文檔 --- 請(qǐng)求對(duì)象
       DeleteRequest request = new DeleteRequest();
       //設(shè)置請(qǐng)求參數(shù) --- 表示要?jiǎng)h除user索引中id為1001的文檔
       request.index("user").id("1001");
       
       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       DeleteResponse response = esClient.delete(request,RequestOptions.DEFAULT);
       System.out.println(response.getResult());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.9 批量創(chuàng)建文檔
public class ESTestDocInsertBatch {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //批量新增文檔 --- 請(qǐng)求對(duì)象
       BulkRequest request = new BulkRequest();
       //以JSON格式批量新增文檔 --- 存入請(qǐng)求體中
       request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "張起靈","sex","boy","age",21));
       request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "小哥","sex","boy","age",18));
       request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "小宋","sex","boy","age",20));

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
       System.out.println(response.getTook());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.10 批量刪除文檔
public class ESTestDocDeleteBatch {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //批量刪除文檔 --- 請(qǐng)求對(duì)象
       BulkRequest request = new BulkRequest();
       //將要?jiǎng)h除的文檔id存入請(qǐng)求體中
       request.add(new DeleteRequest().index("user").id("1001"));
       request.add(new DeleteRequest().index("user").id("1002"));
       request.add(new DeleteRequest().index("user").id("1003"));

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       BulkResponse response = esClient.bulk(request,RequestOptions.DEFAULT);
       System.out.println(response.getTook());
       System.out.println(response.getItems());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.11 全量查詢

因?yàn)樯厦鎯蓚€(gè)代碼案例分別進(jìn)行了批量創(chuàng)建、批量刪除。所以這里首先執(zhí)行一次批量創(chuàng)建的代碼,確保索引中有多條數(shù)據(jù)供我們查詢。

public class ESTestDocInsertBatch {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //批量新增文檔 --- 請(qǐng)求對(duì)象
       BulkRequest request = new BulkRequest();
       //以JSON格式批量新增文檔 --- 存入請(qǐng)求體中
       request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "張起靈","sex","boy","age",21));
       request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "小哥","sex","boy","age",18));
       request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "小宋","sex","boy","age",20));
       request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON, "name", "冷少","sex","boy","age",25));
       request.add(new IndexRequest().index("user").id("1005").source(XContentType.JSON, "name", "Java軟件工程師","sex","girl","age",40));

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
       System.out.println(response.getTook());

       //關(guān)閉ES客戶端
       esClient.close();
   }
}

下面首先進(jìn)行全量查詢操作。

public class ESTestDocQuery {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //1.查詢索引中的全部文檔 --- matchAllQuery 全量查詢
       //創(chuàng)建搜索請(qǐng)求對(duì)象
       SearchRequest request = new SearchRequest();
       //設(shè)置參數(shù) --- 表示查詢哪個(gè)索引中的文檔內(nèi)容
       request.indices("user");
       //構(gòu)建查詢的請(qǐng)求體 --- 存入搜索請(qǐng)求對(duì)象中
       request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       SearchResponse response = esClient.search(request,RequestOptions.DEFAULT);
       //獲取查詢到的結(jié)果集
       SearchHits hits = response.getHits();
       System.out.println(hits.getTotalHits()); //結(jié)果集的條數(shù)
       System.out.println(response.getTook());  //總耗時(shí)
       //遍歷結(jié)果集
       for (SearchHit hit : hits) {
           System.out.println(hit.getSourceAsString());
       }

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.12 條件查詢

做匹配查詢,查詢年齡age=21的文檔內(nèi)容。

public class ESTestDocQuery {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //2.條件查詢--- termQuery age=21
       //創(chuàng)建搜索請(qǐng)求對(duì)象
       SearchRequest request = new SearchRequest();
       //設(shè)置參數(shù) --- 表示查詢哪個(gè)索引中的文檔內(nèi)容
       request.indices("user");
       //構(gòu)建查詢的請(qǐng)求體 --- 存入搜索請(qǐng)求對(duì)象中
       request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",21)));

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       SearchResponse response = esClient.search(request,RequestOptions.DEFAULT);
       //獲取查詢到的結(jié)果集
       SearchHits hits = response.getHits();
       System.out.println(hits.getTotalHits()); //結(jié)果集的條數(shù)
       System.out.println(response.getTook());  //總耗時(shí)
       //遍歷結(jié)果集
       for (SearchHit hit : hits) {
           System.out.println(hit.getSourceAsString());
       }

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.13 分頁查詢

做全量查詢,對(duì)查詢結(jié)果進(jìn)行分頁顯示,每頁2條數(shù)據(jù),查詢第1頁。
查看第幾頁:(頁碼 - 1)*每頁條數(shù)

public class ESTestDocQuery {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //3.分頁查詢
       //創(chuàng)建搜索請(qǐng)求對(duì)象
       SearchRequest request = new SearchRequest();
       //設(shè)置參數(shù) --- 表示查詢哪個(gè)索引中的文檔內(nèi)容
       request.indices("user");
       //構(gòu)建查詢的請(qǐng)求體
       SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
       builder.from(0);
       builder.size(2);
       //將構(gòu)建好的查詢請(qǐng)求體存入搜索請(qǐng)求對(duì)象中
       request.source(builder);

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       SearchResponse response = esClient.search(request,RequestOptions.DEFAULT);
       //獲取查詢到的結(jié)果集
       SearchHits hits = response.getHits();
       System.out.println(hits.getTotalHits()); //結(jié)果集的條數(shù)
       System.out.println(response.getTook());  //總耗時(shí)
       //遍歷結(jié)果集
       for (SearchHit hit : hits) {
           System.out.println(hit.getSourceAsString());
       }

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.14 排序查詢

做全量查詢,對(duì)查詢結(jié)果中的年齡age字段做降序排序。

public class ESTestDocQuery {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //4.對(duì)查詢結(jié)果進(jìn)行排序
       //創(chuàng)建搜索請(qǐng)求對(duì)象
       SearchRequest request = new SearchRequest();
       //設(shè)置參數(shù) --- 表示查詢哪個(gè)索引中的文檔內(nèi)容
       request.indices("user");
       //構(gòu)建查詢的請(qǐng)求體
       SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
       builder.sort("age", SortOrder.DESC);
       //將構(gòu)建好的查詢請(qǐng)求體存入搜索請(qǐng)求對(duì)象中
       request.source(builder);

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       SearchResponse response = esClient.search(request,RequestOptions.DEFAULT);
       //獲取查詢到的結(jié)果集
       SearchHits hits = response.getHits();
       System.out.println(hits.getTotalHits()); //結(jié)果集的條數(shù)
       System.out.println(response.getTook());  //總耗時(shí)
       //遍歷結(jié)果集
       for (SearchHit hit : hits) {
           System.out.println(hit.getSourceAsString());
       }

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.15 過濾字段查詢

做全量查詢,同時(shí)排除性別sex字段。

public class ESTestDocQuery {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //5.過濾字段
       //創(chuàng)建搜索請(qǐng)求對(duì)象
       SearchRequest request = new SearchRequest();
       //設(shè)置參數(shù) --- 表示查詢哪個(gè)索引中的文檔內(nèi)容
       request.indices("user");
       //構(gòu)建查詢的請(qǐng)求體
       SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
       String[] excludes = {"sex"};
       String[] includes = {};
       builder.fetchSource(includes,excludes);
       //將構(gòu)建好的查詢請(qǐng)求體存入搜索請(qǐng)求對(duì)象中
       request.source(builder);

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       SearchResponse response = esClient.search(request,RequestOptions.DEFAULT);
       //獲取查詢到的結(jié)果集
       SearchHits hits = response.getHits();
       System.out.println(hits.getTotalHits()); //結(jié)果集的條數(shù)
       System.out.println(response.getTook());  //總耗時(shí)
       //遍歷結(jié)果集
       for (SearchHit hit : hits) {
           System.out.println(hit.getSourceAsString());
       }

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
1.2.16 組合條件查詢

查詢年齡 age=18 或者 name=張起靈 的文檔內(nèi)容。

public class ESTestDocQuery {
   public static void main(String[] args) throws IOException {
       //創(chuàng)建ES客戶端
       RestHighLevelClient esClient = new RestHighLevelClient(
               RestClient.builder(new HttpHost("localhost",9200,"http"))
       );

       //6.組合查詢
       //創(chuàng)建搜索請(qǐng)求對(duì)象
       SearchRequest request = new SearchRequest();
       //設(shè)置參數(shù) --- 表示查詢哪個(gè)索引中的文檔內(nèi)容
       request.indices("user");
       //構(gòu)建查詢的請(qǐng)求體
       SearchSourceBuilder builder = new SearchSourceBuilder();
       BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
       boolQueryBuilder.should(QueryBuilders.matchQuery("age",18));
       boolQueryBuilder.should(QueryBuilders.matchQuery("name","張起靈"));
       builder.query(boolQueryBuilder);
       //將構(gòu)建好的查詢請(qǐng)求體存入搜索請(qǐng)求對(duì)象中
       request.source(builder);

       //發(fā)送請(qǐng)求 --- 獲取響應(yīng)
       SearchResponse response = esClient.search(request,RequestOptions.DEFAULT);
       //獲取查詢到的結(jié)果集
       SearchHits hits = response.getHits();
       System.out.println(hits.getTotalHits()); //結(jié)果集的條數(shù)
       System.out.println(response.getTook());  //總耗時(shí)
       //遍歷結(jié)果集
       for (SearchHit hit : hits) {
           System.out.println(hit.getSourceAsString());
       }

       //關(guān)閉ES客戶端
       esClient.close();
   }
}
 RestClient.builder(new HttpHost("localhost",9200,"http"))

二、參考鏈接

[01] 分布式全文搜索引擎 Elasticsearch文章來源地址http://www.zghlxwxcb.cn/news/detail-474575.html

到了這里,關(guān)于552、Elasticsearch詳細(xì)入門教程系列 -【分布式全文搜索引擎 Elasticsearch(三)】 2023.05.19的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包