基本环境的创建

pom依赖

 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.player3.es</groupId>
    <artifactId>estest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>estest</name>
    <description>Demo project for Spring Boot</description>
 ​
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>
 ​
    <dependencies>
        <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单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
 ​
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
 ​
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
 ​
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 ​
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.player3.es.estest.EstestApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 ​
 </project>
 ​

创建索引 EsTest_Client

 public static void main(String[] args) throws IOException {
       //创建es客户端对象
         RestHighLevelClient esclient = new RestHighLevelClient(
                 RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
         ///关闭连接
         esclient.close();
    }

通过:localhost:9200/_cat/indices?v 查看,确实新增一条索引

查询索引 EsTest_index_search

  public static void main(String[] args) throws IOException {
      //创建es客户端对象
        RestHighLevelClient esclient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
 ​
        GetIndexRequest player3 = new GetIndexRequest("player3");
        GetIndexResponse response = esclient.indices().get(player3, RequestOptions.DEFAULT);
 ​
          System.out.println(response.getAliases());
          System.out.println(response.getDataStreams());
          System.out.println(response.getDefaultSettings());
          System.out.println(response.getIndices());
          System.out.println(response.getMappings());
          System.out.println(response.getSettings());
        ///关闭连接
        esclient.close();
    }

删除索引: EsTest_index_delete

   public static void main(String[] args) throws IOException {
      //创建es客户端对象
        RestHighLevelClient esclient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
        DeleteIndexRequest shoppingg = new DeleteIndexRequest("shoppingg");
 ​
        AcknowledgedResponse delete = esclient.indices().delete(shoppingg, RequestOptions.DEFAULT);//create(request, RequestOptions.DEFAULT);
 ///关闭连接
        System.out.println(delete.isAcknowledged());
        esclient.close();
    }

在索引下新增数据 EsTest_Client_Doc_Insert

 class User
 ​
 private String name;
  private String sex;
  private Integer age;
  public static void main(String[] args) throws IOException {
      //创建es客户端对象
        RestHighLevelClient esclient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
        //插入数据
        IndexRequest indexRequest = new IndexRequest();
        //需要插入的数据 index|索引 id|唯一标识
        indexRequest.index("user").id("1020");
        User user = new User();
        user.setName("李为");
        user.setSex("男");
        user.setAge(27);
        // 向es插入数据,必须将数据转换为json jackson
        ObjectMapper mapper=new ObjectMapper();
        String userjson = mapper.writeValueAsString(user);//对象转str
        indexRequest.source(userjson, XContentType.JSON);//index为user,id1020的数据
        IndexResponse index = esclient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(index);
        ///关闭连接
        esclient.close();
    }

索引下的修改数据 EsTest_Client_Doc_Update

 ​
    //TODO 如果直接把全部的值替换 就是全量更新
 //   public static void main(String[] args) throws IOException {
 //       //创建es客户端对象
 //       RestHighLevelClient esclient = new RestHighLevelClient(
 //               RestClient.builder(new HttpHost("localhost",9200,"http"))
 //       );
 //       //插入数据
 //       IndexRequest indexRequest = new IndexRequest();
 //       //需要插入的数据 index|索引 id|唯一标识
 //       indexRequest.index("user").id("1020");
 //
 //       User user = new User();
 //       user.setName("李为");
 //       user.setSex("男");
 //       user.setAge(26);
 //       // 向es插入数据,必须将数据转换为json jackson
 //       ObjectMapper mapper=new ObjectMapper();
 //       String userjson = mapper.writeValueAsString(user);//对象转str
 //       indexRequest.source(userjson, XContentType.JSON);//index为user,id1020的数据
 //       IndexResponse index = esclient.index(indexRequest, RequestOptions.DEFAULT);
 //       System.out.println(index);
 //       ///关闭连接
 //       esclient.close();
 //   }
 ​
    public static void main(String[] args) throws IOException {
                //创建es客户端对象
        RestHighLevelClient esclient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
 ​
 ​
        UpdateRequest update = new UpdateRequest();
        update.index("user").id("1020");
      update.doc(XContentType.JSON,"sex","女","age",18);
 ​
        esclient.update(update, RequestOptions.DEFAULT);
        esclient.close();
    }

索引下的删除数据 EsTest_Client_Doc_delete

   public static void main(String[] args) throws IOException {
      //创建es客户端对象
        RestHighLevelClient esclient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
        DeleteRequest deleteRequest = new DeleteRequest();
        deleteRequest.index("user").id("1020");
        esclient.delete(deleteRequest, RequestOptions.DEFAULT);
 ​
 ​
        ///关闭连接
        esclient.close();
    }

索引下的批量插入 EsTest_Client_Doc_insert_bash

 public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
BulkRequest request = new BulkRequest();
request.add(new IndexRequest().index("user").id("1010").source(XContentType.JSON,
"name","李伟","age",27,"sex","男"));
request.add(new IndexRequest().index("user").id("1011").source(XContentType.JSON,
"name","lisi","age",22,"sex","女"));
request.add(new IndexRequest().index("user").id("1012").source(XContentType.JSON,
"name","wangwu","age",26,"sex","女"));
request.add(new IndexRequest().index("user").id("1013").source(XContentType.JSON,
"name","zhaoliu","age",27,"sex","女"));
esclient.bulk(request, RequestOptions.DEFAULT);
///关闭连接
esclient.close();
}

索引下的批量删除数据 EsTest_Client_Doc_delete_bash

 public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("user").id("1010"));
request.add(new DeleteRequest().index("user").id("1011"));
request.add(new DeleteRequest().index("user").id("1012"));
request.add(new DeleteRequest().index("user").id("1013"));
esclient.bulk(request, RequestOptions.DEFAULT);
///关闭连接
esclient.close();
}

条件查询之全部查询 EsTest_Client_Query

public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
//查询所有的数据
searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
// System.out.println(search);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
///关闭连接
esclient.close();
}

条件查询之匹配查询 EsTest_Client_termQuery

 public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest req = new SearchRequest();
req.indices("user");
req.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",27))); SearchResponse search = esclient.search(req, RequestOptions.DEFAULT); ///关闭连接
esclient.close();
SearchHits hits = search.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}

条件查询之分页查询 EsTest_Client_From_Size

 public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
query.from(0);//当前页
query.size(3);//每页条数
searchRequest.indices("user");
searchRequest.source(query);
// searchRequest.
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
///关闭连接
esclient.close();
}

条件查询之排序 EsTest_Client_From_Size_Sort

  public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
query.from(0);//当前页
query.size(3);//每页条数
query.sort("age", SortOrder.DESC);
searchRequest.indices("user");
searchRequest.source(query);
// searchRequest.
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
///关闭连接
esclient.close();
}

条件查询之排除某列 EsTest_Client_Fetch

public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
String[] includes={};//包含
String[] excludes={"age"};//排除 query.fetchSource(includes,excludes);
searchRequest.indices("user");
searchRequest.source(query);
// searchRequest.
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
///关闭连接
esclient.close();
}

组合查询 EsTest_Client_Should

查询男人 年龄30的

 public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder bool = new BoolQueryBuilder();
bool.must(QueryBuilders.matchQuery("sex","男"));
bool.must(QueryBuilders.matchQuery("age",27));
//组合查询
builder.query(bool);
searchRequest.source(builder); SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
///关闭连接
SearchHits hits = search.getHits();
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
} }

查询不是男人的

public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder bool = new BoolQueryBuilder();
bool.must(QueryBuilders.matchQuery("age",27));
bool.mustNot(QueryBuilders.matchQuery("sex","男"));
//组合查询
builder.query(bool);
searchRequest.source(builder); SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
///关闭连接
SearchHits hits = search.getHits();
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
} }

年龄为26或27

public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder bool = new BoolQueryBuilder();
// age=27 and sex =男
// bool.must(QueryBuilders.matchQuery("age",27));
// bool.mustNot(QueryBuilders.matchQuery("sex","男")); //age=26 or age=27
bool.should(QueryBuilders.matchQuery("age",27));
bool.should(QueryBuilders.matchQuery("age",26)); //组合查询
builder.query(bool);
searchRequest.source(builder); SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
///关闭连接
SearchHits hits = search.getHits();
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
} }

年龄大于等于27小于40

 public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
//年龄大于等于27小于40
RangeQueryBuilder age = QueryBuilders.rangeQuery("age");
age.gte(27);
age.lt(40);
//组合查询
builder.query(age);
searchRequest.source(builder); SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
///关闭连接
SearchHits hits = search.getHits();
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
} }

高亮查询 EsTest_Client_GaoLiang

 public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhaoliu"); //SearchSourceBuilder 带有高亮标签
//记住这里是创建的不是 builder.highlighter 空参弄出来的,不然会报错的
HighlightBuilder highlighter = new HighlightBuilder();
highlighter.preTags("<font color='red'>");//前缀
highlighter.postTags("</font>");//后缀
highlighter.field("name");//name属性高亮显示
builder.highlighter(highlighter);
builder.query(termQueryBuilder); request.source(builder);
SearchResponse search = esclient.search(request, RequestOptions.DEFAULT); SearchHits hits = search.getHits();
///关闭连接
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
} }

聚合查询

求最大值

    public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
MaxAggregationBuilder field = AggregationBuilders.max("maxAge").field("age");
builder.aggregation(field);
request.source(builder);
SearchResponse search = esclient.search(request, RequestOptions.DEFAULT); SearchHits hits = search.getHits();
///关闭连接
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
} }

分组

 public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermsAggregationBuilder ageGroup = AggregationBuilders.terms("ageGroup").field("age");
builder.aggregation(ageGroup);
request.source(builder);
SearchResponse search = esclient.search(request, RequestOptions.DEFAULT); SearchHits hits = search.getHits();
///关闭连接
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
} }

es使用java的api操作的更多相关文章

  1. ES的java端API操作

    首先简单介绍下写这篇博文的背景,最近负责的一个聚合型的新项目要大量使用ES的检索功能,之前对es的了解还只是纯理论最多加个基于postman的索引创建操作,所以这次我得了解在java端如何编码实现:网 ...

  2. ES系列十五、ES常用Java Client API

    一.简介 1.先看ES的架构图 二.ES支持的客户端连接方式 1.REST API http请求,例如,浏览器请求get方法:利用Postman等工具发起REST请求:java 发起httpClien ...

  3. Java原生API操作XML

    使用Java操作XML的开源框架比较多,如著名的Dom4J.JDOM等,但个人认为不管你用那个框架都要对JDK原生的API有所了解才能更得心应手的应用.本篇就来简单了解下原生的XML API. JAV ...

  4. 读《分布式一致性原理》JAVA客户端API操作3

    更新数据 客户端可以通过zookeeper的API来更新一个节点的数据内容,有如下两个接口: public Stat setData(final String path, byte data[], i ...

  5. 读《分布式一致性原理》JAVA客户端API操作2

    创建节点 通过客户端API来创建一个数据节点,有一下两个接口: public String create(final String path, byte data[], List<ACL> ...

  6. 读《分布式一致性原理》JAVA客户端API操作

    创建会话 客户端可以通过创建一个Zookeeper实例来连接服务器.4种构造方法如下 ZooKeeper(connectString, sessionTimeout, watcher): ZooKee ...

  7. MongoDB -- JAVA基本API操作

    package com.example.mongodb.mongodb.demo; import com.mongodb.MongoClient; import com.mongodb.client. ...

  8. 1.java soap api操作和发送soap消息

    转自:https://blog.csdn.net/lbinzhang/article/details/84721359 1. /** * soap请求 * * @return * @throws Ex ...

  9. es之java各种查询操作

    matchAllQuery 匹配所有文档 queryStringQuery 基于Lucene的字段检索 wildcardQuery 通配符查询匹配多个字符,?匹配1个字符* termQuery 词条查 ...

随机推荐

  1. wqs二分 学习笔记

    wqs二分学习笔记 wqs二分适用题目及理论分析 wqs二分可以用来解决这类题目: 给你一个强制要求,例如必须\(n\)条白边,或者划分成\(n\)段之类的,然后让你求出最大(小)值.但是需要满足图像 ...

  2. 洛谷3703 SDOI2017树点涂色(LCT+线段树+dfs序)

    又一道好题啊qwqqqq 一开始看这个题,还以为是一个树剖的什么毒瘤题目 (不过的确貌似可以用树剖啊) qwq这真是一道\(LCT\)维护颜色的好题 首先,我们来一个一个操作的考虑. 对于操作\(1\ ...

  3. PAT (Basic Level) Practice (中文)1076 Wifi密码 (15分)

    1076 Wifi密码 (15分) 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B- ...

  4. perl合并文件

    使用Perl合并文件 有时需要将整个目录下的小文件合并到一个文件中,以便查阅检索 特性 整个目录完全遍历,自动存入单个文件顺序遍历文件 待合并的目录 合并后的文件内容 syscfg/test1 sys ...

  5. 【JAVA】【作业向】第一题:本学期一班级有n名学生,m门课程。现要求对每门课程的成绩进行统计:平均成绩、最高成绩、最低成绩,并统计考试成绩的分布律。

    1.预备知识:动态数组Array实现: 2.解题过程需要理解的知识:吧唧吧唧吧唧吧唧 不想做了 就用了最简单的方法 和c语言类似 java版本 `import java.util.Scanner; / ...

  6. Java正则中"\\\\"表示普通反斜杠

    Java中"\"用于转义字符,"\\"表示普通无转义功能的反斜杠. 如果将字符串当做正则表达式来解析,那么"\\"也有了特殊意义,它与其后的 ...

  7. Java/JDK/J2SE

    Java8与JDK1.8与JDK8与J2SE8与J2SE1.8的区别是什么? Java是面向对象的编程语言,在我们开发Java应用的程序员的专业术语里,Java这个单词其实指的是Java开发工具,也就 ...

  8. DevOps 时代的高效测试之路

    10 月 22 日,2021 届 DevOps 国际峰会在北京顺利召开,来自国内外的顶级技术专家共同畅谈 DevOps 体系与方法.过程与实践.工具与技术.CODING 测试及研发流程管理产品总监程胜 ...

  9. FastAPI 学习之路(三十三)操作数据库

    通过创建pydantic模型进行验证提交数据 from pydantic import BaseModel class UserBase(BaseModel): email: str class Us ...

  10. 模拟赛18 T1 施工 题解

    前言: 真的是不容易啊.这个题在考场上想到了最关键的性质,但是没写出来. 后来写出来,一直调,小错不断. 没想到改的最后一个错误是两个int 乘起来爆了int 其实最后我还是觉得复杂度很假.\(n^2 ...