广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java elasticSearch-api的具体操作步骤讲解
  • 716
分享到

Java elasticSearch-api的具体操作步骤讲解

2024-04-02 19:04:59 716人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1.环境准备2.针对索引操作3.针对doc操作(增删改)4.针对doc操作(查)5.java-api6.spring-data-elasticsearch使用步骤 1.环境准备

使用步骤

1.环境准备

用的是windows版,自行下载

链接: 下载地址

2.针对索引操作

这里是kibana上操作的(也可以用postman操作):

在这里插入图片描述


#创建索引,指定文档id
PUT /test1/type1/1
{
  "name":"张三",
   "age":30
  
}
#创建索引规则(类似数据库建表)
PUT /test2
{
  "mappings": {
    "properties": {
      "name":{
        "type":"text"
      },
      "age":{
        "type": "integer"
      },
      "birthday":{
        "type": "date"
      }
    }
  }
}
#获取索引的信息,properties类型
GET test2
#创建索引,properties不指定类型会有默认类型
#也可以用作修改,但是必须写上全部字段,不然会丢失未写字段
PUT /test3/_doc/1
{
  "name":"张三",
  "age":30,
  "birth":"1991-06-23"
}
GET test3
#查看es健康状态
GET _cat/health
#查看所有索引状态
GET _cat/indices?v
#修改
POST /test3/_doc/1/_update
{
  "doc":{
    "name":"李四"
  }
}

3.针对doc操作(增删改)

代码如下(示例):


#新增索引,并添加doc
POST /chen/user/1
{
  "name":"张三",
  "age":11,
  "desc":"一顿操作猛如虎,一看工资2500",
  "tags":["技术宅","温暖","直男"]
}
POST /chen/user/2
{
  "name":"李四",
  "age":12,
  "desc":"憨批",
  "tags":["渣男","旅游","交友"]
}
POST /chen/user/3
{
  "name":"王五",
  "age":13,
  "desc":"瓜怂",
  "tags":["靓女","旅游","美食"]
}
POST /chen/user/4
{
  "name":"刘六",
  "age":14,
  "desc":"锅盔",
  "tags":["衰仔","旅游","美食"]
}
#获取数据
GET chen/user/1
#更新数据
POST chen/user/1/_update
{
  "doc":{
    "name":"更新"
  }
}
#删除
DELETE chen/user/1
#条件查询,匹配度越高,_score(分值)越高
GET chen/user/_search?q=name:李
GET chen/user/_search?q=name:李四
#等价于上面
GET chen/user/_search
{
  "query": {
    "match": {
      "name": "李四"
    }
  }
}

4.针对doc操作(查)

查询1(示例):


#_source结果过滤(指定需要字段结果集)
#sort排序
#from-size分页(类似limit )
#注意:这个查询是不可以些多个字段的(我试过了)
GET chen/user/_search
{
  "query": {
    "match": {
      "name": "李四"
    }
  },
  "_source": ["name","age"],
   "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ],
  "from":0,
  "size":1
}
#多条件精确查询
#以下都是bool的二级属性
#must:必须
#should,满足任意条件
#must_not,表示不满足
GET chen/user/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "name": "李四"
        }},
        {"match": {
          "age": 11
        }}
      ]
    }
  }
}
#过滤.注意filter是bool(多条件)的二级属性
GET chen/user/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "name": "李四"
        }}
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 20
          }
        }
      }
    }
  }
}
#分词器依然有效
#多个条件空格隔开就行,只要满足其中一个,就会被逮到
GET chen/user/_search
{
  "query": {
    "match": {
      "tags": "男 技术"
    }
  }
}
#精确查询,结果只能为1,多条直接不显示
GET chen/user/_search
{
  "query": {
    "term": {
      "name": "李四"
    }
  }
}

查询2(示例):


#新建索引
PUT test4
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "desc":{
        "type": "keyWord"
      }
    }
  }
}
#插入数据
PUT test4/_doc/1
{
  "name":"张三name",
  "desc":"张三desc"
}
PUT test4/_doc/2
{
  "name":"张三name2",
  "desc":"张三desc2"
}
#分词器查询(并不是查询索引里的数据,而是将text的内容用分词器拆分的结果)
GET _analyze
{
  "analyzer": "keyword",
  "text": ["张三name"]
}
GET _analyze
{
  "analyzer": "standard",
  "text": "张三name"
}
GET test4/_search
{
  "query": {
    "term": {
      "name": "张"
    }
  }
}
#==keyword不会被分词器解析==
GET test4/_search
{
  "query": {
    "term": {
      "desc": "张三desc"
    }
  }
}

查询3(示例):


PUT test4/_doc/3
{
  "t1":"22",
  "t2":"2020-4-6"
}
PUT test4/_doc/4
{
  "t1":"33",
  "t2":"2020-4-7"
}
#精确查询多个值
GET test4/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "t1": "22"
          }
        },
        {
          "term": {
            "t1": "33"
          }
        }
      ]
    }
  }
}
#highlight:高亮
#pre_tags,post_tags:自定义高亮条件,前缀后缀
GET chen/user/_search
{
  "query": {
    "match": {
      "name": "李四"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'", 
    "post_tags": "</p>", 
    "fields": {
      "name":{}
    }
  }
}

5.java-api

索引操作:


public class ES_Index {
    private static final String HOST_NAME = "localhost";
    private static final Integer PORT = 9200;
    private static RestHighLevelClient client;

    //创建ES客户端
    static {
        RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(HOST_NAME, PORT));
        client = new RestHighLevelClient(restClientBuilder);
    }

    //关闭ES客户端
    public void close() {
        if (null != client) {
            try {
                client.close();
            } catch (ioException e) {
                e.printStackTrace();
            }
        }
    }
    //创建索引
    public void addIndex() throws IOException {
        //创建索引
        CreateIndexRequest request = new CreateIndexRequest("chen");
        CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
        //响应状态
        System.out.println("索引创建操作: " + response.isAcknowledged());
    }
    //查询索引
    public void selectIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("chen");
        GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
        System.out.println("索引查询操作: " +response.getAliases());
        System.out.println("索引查询操作: " +response.getMappings());
        System.out.println("索引查询操作: " +response.getSettings());
    }
    //删除索引
    public void deleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("chen");
        AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println("索引删除操作: "+response.isAcknowledged());
    }
    public static void main(String[] args) throws IOException {
        ES_Index index=new ES_Index();
        //index.addIndex();
        //index.selectIndex();
        index.deleteIndex();
        index.close();
    }
}

文档操作:


public class ES_Doc {
    private static final String HOST_NAME = "localhost";
    private static final Integer PORT = 9200;
    private static RestHighLevelClient client;

    //创建ES客户端
    static {
        RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(HOST_NAME, PORT));
        client = new RestHighLevelClient(restClientBuilder);
    }

    //关闭ES客户端
    public void close() {
        if (null != client) {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //插入数据
    public void aDDDoc() throws IOException {
        IndexRequest request = new IndexRequest();
        User user = new User("张三", "男", 18);
        //向es插入数据,必须将数据转换为JSON格式
        String userjson = new ObjectMapper().writeValueAsString(user);
        request.index("user").id("1001").source(userJson, XContentType.JSON);
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);
        System.out.println("文档创建操作: " + response.getResult());
    }

    //修改数据(局部修改)
    public void updateDoc() throws IOException {
        UpdateRequest request = new UpdateRequest();
        request.index("user").id("1001").doc(XContentType.JSON, "sex", "女");
        UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
        System.out.println("文档修改操作: " + response.getResult());
    }

    //获取数据
    public void getDoc() throws IOException {
        GetRequest request = new GetRequest();
        request.index("user").id("1001");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        User user = new ObjectMapper().readValue(response.getSourceAsString(), User.class);
        System.out.println("文档获取操作: " + user);
    }

    //删除数据
    public void deleteDoc() throws IOException {
        DeleteRequest request = new DeleteRequest();
        request.index("user").id("1001");
        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        System.out.println("文档删除操作: " + response.getResult());
    }

    //批量插入数据
    public void addBatch() throws IOException {
        BulkRequest request = new BulkRequest();
        request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "张三", "sex", "男", "age", 10));
        request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "李四", "sex", "男", "age", 20));
        request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "王五", "sex", "女", "age", 30));
        request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON, "name", "赵六", "sex", "男", "age", 40));
        request.add(new IndexRequest().index("user").id("1005").source(XContentType.JSON, "name", "孙七", "sex", "女", "age", 50));
        BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
        System.out.println("文档批量新增操作: " + response.getTook());
        System.out.println("文档批量新增操作: " + !response.hasFailures());//是否失败
    }

    //批量删除数据
    public void deleteBatch() throws IOException {
        BulkRequest request = new BulkRequest();
        request.add(new DeleteRequest().index("user").id("1001"));
        request.add(new DeleteRequest().index("user").id("1002"));
        request.add(new DeleteRequest().index("user").id("1003"));
        request.add(new DeleteRequest().index("user").id("1004"));
        request.add(new DeleteRequest().index("user").id("1005"));
        BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
        System.out.println("文档批量删除操作: " + response.getTook());
        System.out.println("文档批量删除操作: " + !response.hasFailures());//是否失败
    }

    //查询(重点)
    public void searchDoc() throws IOException {
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //1.查询索引中的全部数据
        //request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
        //2.查询年龄为30的数据
        //request.source(new SearchSourceBuilder().query(QueryBuilders.terMQuery("age", 30)));
        //3.分页查询,当前第0页,每页两条
        //request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).from(0).size(2));
        //4.排序,倒序
        //request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).sort("age", SortOrder.DESC));
        //5.过滤字段(排除和包含,也可以是数组)
        //request.source(new SearchSourceBuilder().fetchSource("name", null));
        //6.组合查询
        //BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        //6.1 must相当于and
        //boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
        //boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "女"));
        //6.2 should相当于or
        //boolQueryBuilder.should(QueryBuilders.matchQuery("age", 30));
        //boolQueryBuilder.should(QueryBuilders.matchQuery("sex", "女"));
        //request.source(new SearchSourceBuilder().query(boolQueryBuilder));
        //7.范围查询
        //request.source(new SearchSourceBuilder().query(QueryBuilders.rangeQuery("age").gte(30).lte(40)));
        //8.模糊查询Fuzziness.ONE即只差1个字符
        //request.source(new SearchSourceBuilder().query(QueryBuilders.fuzzyQuery("name", "王五").fuzziness(Fuzziness.ONE)));
        //9.高亮显示
        //SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchPhraseQuery("name", "张三"));
        //builder.highlighter(new HighlightBuilder().preTags("<font color='red'>").postTags("</font>").field("name"));
        //request.source(builder);
        //10.聚合查询
        //SearchSourceBuilder builder = new SearchSourceBuilder();
        //MaxAggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
        //builder.aggregation(aggregationBuilder);
        //request.source(builder);
        //11.分组查询
        SearchSourceBuilder builder = new SearchSourceBuilder();
        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
        builder.aggregation(aggregationBuilder);
        request.source(builder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("--条数: " + hits.getTotalHits());
        System.out.println("--用时: " + response.getTook());
        hits.forEach((item)->{
            System.out.println("--数据: " + item.getSourceAsString());
        });
    }

    public static void main(String[] args) throws IOException {
        ES_Doc doc = new ES_Doc();
        //doc.addDoc();
        //doc.updateDoc();
        //doc.getDoc();
        //doc.deleteDoc();
        //doc.addBatch();
        //doc.deleteBatch();
        doc.searchDoc();
        doc.close();
    }
}

6.spring-data-elasticsearch

实体类: 关键在于@Document和@Field注解
shards 代表分片
replicas 代表副本


@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "product", shards = 3, replicas = 1)
public class Product {
 @Id
 private Long id;//商品唯一标识
 @Field(type = FieldType.Text)
 private String title;//商品名称
 @Field(type = FieldType.Keyword)
 private String cateGory;//分类名称
 @Field(type = FieldType.Double)
 private Double price;//商品价格
 @Field(type = FieldType.Keyword,index = false)
 private String images;//图片地址
}

dao层: 这样就已经可以了,类似mybatis-plus的BaseMapper,封装好了一些操作


@Repository
public interface ProductDao extends ElasticsearchRepository<Product,Long> {
}

yaml :不用怎么配置,默认就去找localhost:9200

测试 :不知道为啥dao的很多方法都过时了,看源码注释让回去用elasticsearchRestTemplate,感觉更繁琐


@SpringBootTest
class ElasticsearchApplicationTests {
    @Autowired
    ElasticsearchRestTemplate elasticsearchRestTemplate;
    @Autowired
    ProductDao productDao;

    @Test
    void createIndex() {
        //创建索引,系统初始化会自动创建索引
        System.out.println("创建索引");
    }

    @Test
    void deleteIndex() {
        //创建索引,系统初始化会自动创建索引
        boolean flg = elasticsearchRestTemplate.deleteIndex(Product.class);
        System.out.println("删除索引 = " + flg);
    }

    //新增数据
    @Test
    void addDoc() {
        Product product = new Product();
        product.setId(1001L);
        product.setTitle("华为手机");
        product.setCategory("手机");
        product.setPrice(2999.0);
        product.setImages("www.huawei.com");
        productDao.save(product);
    }

    //修改
    @Test
    void updateDoc() {
        Product product = new Product();
        product.setId(1001L);
        product.setTitle("小米手机");
        product.setCategory("手机");
        product.setPrice(4999.0);
        product.setImages("www.xiaomi.com");
        productDao.save(product);
    }

    //根据 id 查询
    @Test
    void findById() {
        Product product = productDao.findById(1001L).get();
        System.out.println(product);
    }

    //查询所有
    @Test
    void findAll() {
        Iterable<Product> products = productDao.findAll();
        for (Product product : products) {
            System.out.println(product);
        }
    }

    //删除
    @Test
    public void delete() {
        productDao.deleteById(1001L);
    }

    //批量新增
    @Test
    public void saveAll() {
        List<Product> productList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Product product = new Product();
            product.setId((long) i);
            product.setTitle("[" + i + "]小米手机");
            product.setCategory("手机");
            product.setPrice(1999.0 + i);
            product.setImages("http://www.atguigu/xm.jpg");
            productList.add(product);
        }
        productDao.saveAll(productList);
    }

    //分页查询
    @Test
    void findByPageable() {
        Sort orders = Sort.by(Sort.Direction.DESC, "id");
        Pageable pageable = PageRequest.of(0, 5, orders);
        Page<Product> products = productDao.findAll(pageable);
        products.forEach(System.out::println);
    }

    
    @Test
    void termQuery() {
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("category", "手机");
        Iterable<Product> products = productDao.search(termQueryBuilder);
        products.forEach(System.out::println);
    }

    
    @Test
    void termQueryByPage() {
        PageRequest pageRequest = PageRequest.of(0, 5);
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("category", "手机");
        Iterable<Product> products = productDao.search(termQueryBuilder, pageRequest);
        products.forEach(System.out::println);
    }
}

到此这篇关于elasticSearch-api的具体操作步骤讲解的文章就介绍到这了,更多相关elasticSearch-api详解内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java elasticSearch-api的具体操作步骤讲解

本文链接: https://www.lsjlt.com/news/129332.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java elasticSearch-api的具体操作步骤讲解
    目录1.环境准备2.针对索引操作3.针对doc操作(增删改)4.针对doc操作(查)5.java-api6.spring-data-elasticsearch使用步骤 1.环境准备...
    99+
    2022-11-12
  • 解决Java启动qq的具体操作步骤
    要使用Java启动QQ,您需要按照以下步骤进行操作:1. 下载并安装Java Development Kit (JDK):您可以从O...
    99+
    2023-08-23
    Java
  • 解决archiveofourown的具体操作步骤
    要解决archiveofourown的问题,以下是具体的操作步骤:1. 打开archiveofourown的网站:在浏览器中输入"a...
    99+
    2023-08-23
    archiveofourown
  • 解决sparkiv的具体操作步骤
    解决SparkIV的具体操作步骤如下:1. 首先,从互联网上下载并安装SparkIV工具。可以在网上搜索“SparkIV下载”来找到...
    99+
    2023-08-22
    sparkiv
  • elasticSearch-api的具体操作流程是什么
    这篇文章主要介绍“elasticSearch-api的具体操作流程是什么”,在日常操作中,相信很多人在elasticSearch-api的具体操作流程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ela...
    99+
    2023-06-20
  • 做代理服务器的具体操作步骤
    以下是设置代理服务器的具体操作步骤:1. 首先,选择一个合适的服务器来承载代理服务。服务器可以是自己拥有的物理服务器,也可以是云服务...
    99+
    2023-08-25
    代理服务器
  • MySQL中SQL库的基础操作的具体步骤
    本文主要给大家介绍MySQL中SQL库的基础操作的具体步骤,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL中SQL库的基础操作的具体步骤吧。...
    99+
    2022-10-18
  • ERP系统的具体操作步骤是什么呢
    本篇文章为大家展示了ERP系统的具体操作步骤是什么呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  信息时代,对于企业来说,实现统筹化管理,提升办公效率,这就是管理的王道。那么,如何快速实现这一目...
    99+
    2023-06-05
  • win10电脑定时重启的具体操作步骤
    win10电脑怎么定时重启?很多朋友都在问这个问题,因为win10电脑怎么定时重启可以有效的保护电脑,那么win10电脑定时重启是怎么设置的呢?很多朋友不知道怎么弄,所以下面我们来看看win10电脑定时重启具体操作步骤。具体的win10电脑...
    99+
    2023-07-16
  • 大数据的存储与分析的具体操作步骤
    大数据的存储与分析包括以下具体操作步骤:1. 数据采集:从多个来源(如传感器、日志文件、社交媒体等)收集大量的数据。2. 数据清洗:...
    99+
    2023-10-11
    大数据
  • Python web开发框架的具体操作步骤是什么
    这篇文章给大家介绍Python web开发框架的具体操作步骤是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在windows 或是别的操作系统里,我们所使用的manager.py shell 来进行django交互...
    99+
    2023-06-17
  • 如何实现originlab深度学习的具体操作步骤
    要在OriginLab中进行深度学习,可以按照以下步骤操作:1. 安装深度学习模块:首先要确保您已经安装了OriginLab软件,并...
    99+
    2023-08-25
    originlab
  • Windows 8中Hyper-V虚拟机操作应用的具体步骤
      微软将Hyper-V管理器集成到个人Windows 8系统中,可以说是一大改进。而这一改进也说明虚拟化与云计算在IT行业中举足轻重的位置。利用Hyper-V可以在个人电脑中直接创建出Hyper-V,具体...
    99+
    2022-06-04
    虚拟机 具体步骤 操作
  • 解决美国云服务器做代理服务器的具体操作步骤
    要将美国云服务器设置为代理服务器,可以按照以下步骤进行操作:1. 购买或租用一台位于美国的云服务器,确保服务器能够顺利连接互联网。2...
    99+
    2023-09-25
    美国云服务器
  • Win7系统如何显示隐藏文件的具体操作步骤
    win7现在用的人越来越多,但win7界面和xp有很大不同,如果使用XP的方法,让win7显示隐藏文件夹不容易操作,下面我就给大家介绍下让win7显示隐藏文件夹的方法:      ...
    99+
    2023-05-26
    Win7 步骤 文件 系统
  • 阿里云服务器ECS重置密码的具体操作步骤
    阿里云服务器ECS( Elastic ComputeService)是阿里云提供的一项云计算服务,用户可以通过ECS快速部署应用程序,实现资源的弹性伸缩。在使用过程中,用户可能会遇到需要重置密码的情况,那么如何重置ECS的密码呢?本文将详...
    99+
    2023-11-20
    阿里 操作步骤 密码
  • ubuntu22.04服务器的双网卡绑定的具体操作步骤和配置文件
    前言 ubuntu22.04服务器的双网卡绑定具体步骤可以分成以下五步,下面按步骤操作 一、安装必要软件 sudo apt install net-tools 二、编辑/etc/netplan/01-network-manager-a...
    99+
    2023-09-29
    linux 服务器 网络
  • 深入理解Java8新特性之Stream API的终止操作步骤
    目录1.写在前面2.终止操作2.1 终止操作之查找与匹配2.2 终止操作之归约与收集1.写在前面 承接了上一篇文章(说完了Stream API的创建方式及中间操作):深入理解Java...
    99+
    2022-11-12
  • 在CentOS7上搭建MySQL主从复制与读写分离的具体操作步骤
    本篇文章给大家主要讲的是关于在CentOS7上搭建MySQL主从复制与读写分离的具体操作步骤的内容,感兴趣的话就一起来看看这篇文章吧,相信看完在CentOS7上搭建MySQL主从复制与读写分离的具体操作步骤...
    99+
    2022-10-18
  • 将阿里云服务器设为代理服务器的含义及具体操作步骤
    在进行网络通信时,常常需要使用代理服务器来提高网络安全性、访问速度和匿名性。本文将详细解释将阿里云服务器设为代理服务器的具体含义以及具体操作步骤。 一、将阿里云服务器设为代理服务器的含义代理服务器是一种在网络通信中起到中间代理作用的服务器...
    99+
    2023-11-11
    设为 阿里 代理服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作