ElasticSearch从入门到精通(二)

news2024/12/23 8:30:38

ElasticSearch 高级操作

bulk批量操作

批量操作-脚本

#批量操作
#1.删除5号
#新增8号
#更新2号 name为2号
POST _bulk
{"delete":{"_index":"person1","_id":"5"}}
{"create":{"_index":"person1","_id":"8"}}
{"name":"八号","age":18,"address":"北京"}
{"update":{"_index":"person1","_id":"2"}}
{"doc":{"name":"2号"}}

批量操作-java

/**
* Bulk 批量操作
*/
@Test
public void test2() throws IOException {
//创建bulkrequest对象,整合所有操作
    BulkRequest bulkRequest =new BulkRequest();
    /*
    # 1. 删除5号记录
    # 2. 添加6号记录
    # 3. 修改3号记录 名称为 “三号”
    */
    //添加对应操作
    //1. 删除5号记录
    DeleteRequest deleteRequest=new DeleteRequest("person1","5");
    bulkRequest.add(deleteRequest);
    //2. 添加6号记录
    Map<String, Object> map=new HashMap<>();
    map.put("name","六号");
    IndexRequest indexRequest=new IndexRequest("person1").id("6").source(map);
    bulkRequest.add(indexRequest);
    //3. 修改3号记录 名称为 “三号”
    Map<String, Object> mapUpdate=new HashMap<>();
    mapUpdate.put("name","三号");
    UpdateRequest updateRequest=new UpdateRequest("person1","3").doc(mapUpdate);
    bulkRequest.add(updateRequest);
    //执行批量操作
    BulkResponse response = client.bulk(bulkRequest,
    RequestOptions.DEFAULT);
    System.out.println(response.status());
}

导入数据(从mysql导入ES)

第一步:创建索引
PUT goods
{
    "mappings": {
        "properties": {
            "title": {
                "type": "text",
                "analyzer": "ik_smart"
            },
            "price": {
                "type": "double"
            },
            "createTime": {
                "type": "date"
            },
           "categoryName": {
                "type": "keyword"
            },
            "brandName": {
                "type": "keyword"
            },
            "spec": {
                "type": "object"
            },
            "saleNum": {
                "type": "integer"
            },
            "stock": {
                "type": "integer"
            }
        }
    }
}

第二步:java代码进行数据导入

/**
* 从Mysql 批量导入 elasticSearch
*/
@Test
public void test3() throws IOException {
    //1.查询所有数据,mysql
    List<Goods> goodsList = goodsMapper.findAll();
    //2.bulk导入
    BulkRequest bulkRequest=new BulkRequest();
    //2.1 循环goodsList,创建IndexRequest添加数据
    for (Goods goods : goodsList) {
        //2.2 设置spec规格信息 Map的数据 specStr:{}
        String specStr = goods.getSpecStr();
        //将json格式字符串转为Map集合
        Map map = JSON.parseObject(specStr, Map.class);
        //设置spec map
        goods.setSpec(map);
        //将goods对象转换为json字符串
        String data = JSON.toJSONString(goods);
        IndexRequest indexRequest=new
        IndexRequest("goods").source(data,XContentType.JSON);
        bulkRequest.add(indexRequest);
    }
    BulkResponse response = client.bulk(bulkRequest,
    RequestOptions.DEFAULT);
    System.out.println(response.status());
}

ElasticSearch查询

matchAll

脚本

# 默认情况下,es一次展示10条数据,通过from和size来控制分页
# 查询结果详解
GET goods/_search
{
    "query": {
        "match_all": {}
    },
    "from": 0,
    "size": 100
}
GET g

java

/**
* 查询所有
* 1. matchAll
* 2. 将查询结果封装为Goods对象,装载到List中
* 3. 分页。默认显示10条
*/
@Test
public void matchAll() throws IOException {
    //2. 构建查询请求对象,指定查询的索引名称
    SearchRequest searchRequest=new SearchRequest("goods");
    //4. 创建查询条件构建器SearchSourceBuilder
    SearchSourceBuilder sourceBuilder=new SearchSourceBuilder();
    //6. 查询条件
    QueryBuilder queryBuilder= QueryBuilders.matchAllQuery();
    //5. 指定查询条件
    sourceBuilder.query(queryBuilder);
    //3. 添加查询条件构建器 SearchSourceBuilder
    searchRequest.source(sourceBuilder);
    // 8 . 添加分页信息 不设置 默认10条
    // sourceBuilder.from(0);
    // sourceBuilder.size(100);
    //1. 查询,获取查询结果
    SearchResponse searchResponse = client.search(searchRequest,
    RequestOptions.DEFAULT);
    //7. 获取命中对象 SearchHits
    SearchHits hits = searchResponse.getHits();
    //7.1 获取总记录数
    Long total= hits.getTotalHits().value;
    System.out.println("总数:"+total);
    //7.2 获取Hits数据 数组
    SearchHit[] hits1 = hits.getHits();
    //获取json字符串格式的数据
    List<Goods> goodsList = new ArrayList<>();
    for (SearchHit searchHit : hits1) {
        String sourceAsString = searchHit.getSourceAsString();
        //转为java对象
        Goods goods = JSON.parseObject(sourceAsString, Goods.class);
        goodsList.add(goods);
    }
    for (Goods goods : goodsList) {
        System.out.println(goods);
    }
}
设置条件的疑问点

termQuery和matchQuery
term 查询和字段类型有关系,首先回顾一下 ElasticSearch 两个数据类型
ElasticSearch 两个数据类型(做映射时候用于区别是否对这个字段的内容进行分词)
text :会分词,不支持聚合
keyword :不会分词,将全部内容作为一个词条,支持聚合

termQuery和matchQuery作用类似,但是是用在查询条件上的,分别代表的不同的查询方式,termQuery不会对查询条件进行分词,matchQuery则会对查询条件进行分词

term 查询:会将华为手机作为一个整体查询
GET goods/_search
{
    "query": {
        "term": {
            "title": {
                "value": "华为手机"
            }
        }
    }
}
match查询:会将华为手机分为:华为和手机进行查询
# match查询
GET goods/_search
{
    "query": {
        "match": {
            "title": "华为手机"
            }
        },
    "size": 500
}
总结:
term query 会去倒排索引中寻找确切的 term ,它并不知道分词器的存在。这种查询适合 keyword 、numeric date类型
match query 知道分词器的存在。并且理解是如何被分词的
模糊查询
wildcard 查询:会对查询条件进行分词。还可以使用通配符 ? (任意单个字符) 和 * 0 个或多个字符)
"* *" 包含华字的
" *" 华字后边多个字符
" ?" 华字后边多个字符
"* " "? " 会引发全表(全索引)扫描 注意效率问题
# wildcard 查询。查询条件分词,模糊查询
GET goods/_search
{
    "query": {
        "wildcard": {
            "title": {
                "value": "华*"
             }
        }
    }
}
正则查询
\W :匹配包括下划线的任何单词字符,等价于 [A-Z a-z 0-9_] 开头的反斜杠是转义符
+ 号多次出现
(.)* 为任意字符
正则查询取决于正则表达式的效率
GET goods/_search
{
    "query": {
        "regexp": {
            "title": "\\w+(.)*"
        }
    }
}
前缀查询
keyword 类型支持比较好
GET goods/_search
{
    "query": {
        "prefix": {
            "brandName": {
                "value": "三"
            }
        }
    }
}
模糊查询-JavaAPI
//模糊查询
WildcardQueryBuilder query = QueryBuilders.wildcardQuery("title", "华*");//华后多
个字符
//正则查询
RegexpQueryBuilder query = QueryBuilders.regexpQuery("title", "\\w+(.)*");
//前缀查询
PrefixQueryBuilder query = QueryBuilders.prefixQuery("brandName", "三");
范围&排序查询
# 范围查询
GET goods/_search
{
    "query": {
        "range": {
            "price": {
                "gte": 2000,
                "lte": 3000
            }
        }
    },
    "sort": [
        {
            "price": {
                "order": "desc"
            }
        }
   ]

}
queryString查询
queryString 多条件查询
会对查询条件进行分词。
然后将分词后的查询条件和词条进行等值匹配
默认取并集( OR
可以指定多个查询字段
query_string :识别 query 中的连接符( or and
# queryString
GET goods/_search
{
    "query": {
        "query_string": {
            "fields": ["title","categoryName","brandName"],
            "query": "华为 AND 手机"
        }
    }
}
simple_query_string :不识别 query 中的连接符( or and ),查询时会将 华为 "and" 手机 分别进行查询
GET goods/_search
{
    "query": {
        "simple_query_string": {
            "fields": ["title","categoryName","brandName"],
            "query": "华为 AND 手机"
        }
    }
}
query_string :有 default_operator 连接符的脚本
GET goods/_search
{
    "query": {
        "query_string": {
            "fields": ["title","brandName","categoryName"],
            "query": "华为手机 "
            , "default_operator": "AND"
        }
    }
}
java 代码
QueryStringQueryBuilder query = QueryBuilders.queryStringQuery("华为手
机").field("title").field("categoryName")
.field("brandName").defaultOperator(Operator.AND);
simple_query_string :有 default_operator 连接符的脚本
GET goods/_search
{
    "query": {
        "simple_query_string": {
            "fields": ["title","brandName","categoryName"],
            "query": "华为手机 "
            , "default_operator": "OR"
        }
    }
}
注意: query 中的 or and 是查询时 匹配条件是否同时出现 ----or 出现一个即可, and 两个条件同时出现 default_operator or and 是对结果进行 并集( or )、交集( and
布尔查询
boolQuery :对多个查询条件连接。连接方式:
•must and ):条件必须成立
•must_not not ):条件必须不成立
•should or ):条件可以成立
•filter :条件必须成立,性能比 must 高。不会计算得分
得分 : 即条件匹配度 , 匹配度越高,得分越高
# boolquery
#must和filter配合使用时,max_score(得分)是显示的
#must 默认数组形式
GET goods/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "brandName": {
              "value": "华为"
            }
          }
        }
      ],
      "filter": [
        {
          "term": {
            "title": "手机"
          }
        },
        {
          "range": {
            "price": {
              "gte": 2000,
              "lte": 3000
            }
          }
        }
      ]
    }
  }
}
#filter 单独使用 filter可以是单个条件,也可多个条件(数组形式)
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "brandName": {
              "value": "华为"
            }
          }
        }
      ]
    }
  }
}
布尔查询 -JavaAPI
布尔查询: boolQuery
1. 查询品牌名称为 : 华为
2. 查询标题包含:手机
3. 查询价格在: 2000-3000
must filter 为连接方式
term match 为不同的查询方式
//1.构建boolQuery
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//2.构建各个查询条件
//2.1 查询品牌名称为:华为
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("brandName","华为");
boolQuery.must(termQueryBuilder);
//2.2. 查询标题包含:手机
MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("title", "手机");
boolQuery.filter(matchQuery);
//2.3 查询价格在:2000-3000
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("price");
rangeQuery.gte(2000);
rangeQuery.lte(3000);
boolQuery.filter(rangeQuery);
sourceBuilder.query(boolQuery);
聚合查询
指标聚合:相当于 MySQL 的聚合函数。 max min avg sum
桶聚合:相当于 MySQL group by 操作。不要对 text 类型的数据进行分组,会失败。

# 聚合查询
# 指标聚合 聚合函数
GET goods/_search
{
  "query": {
    "match": {
      "title": "手机"
    }
  },
  "aggs": {
    "max_price": {
      "max": {
        "field": "price"
      }
    }
  }
}
# 桶聚合 分组
GET goods/_search
{
  "query": {
    "match": {
      "title": "手机"
    }
  },
  "aggs": {
    "goods_brands": {
      "terms": {
        "field": "brandName",
        "size": 100
      }
    }
  }
}
聚合查询 -JavaAPI
聚合查询:桶聚合,分组查询
1. 查询 title 包含手机的数据
2. 查询品牌列表
/**
* 聚合查询:桶聚合,分组查询
* 1. 查询title包含手机的数据
* 2. 查询品牌列表
*/
@Test
public void testAggQuery() throws IOException {
    SearchRequest searchRequest=new SearchRequest("goods");
    SearchSourceBuilder sourceBuilder=new SearchSourceBuilder();
    //1. 查询title包含手机的数据
    MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "手机");
    sourceBuilder.query(queryBuilder);
    //2. 查询品牌列表 只展示前100条
    AggregationBuilder               
    aggregation=AggregationBuilders.terms("goods_brands").field("brandName").size(100);
    sourceBuilder.aggregation(aggregation);
    searchRequest.source(sourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest,RequestOptions.DEFAULT);
    //7. 获取命中对象 SearchHits
    SearchHits hits = searchResponse.getHits();
    //7.1 获取总记录数
    Long total= hits.getTotalHits().value;
    System.out.println("总数:"+total);
    // aggregations 对象
    Aggregations aggregations = searchResponse.getAggregations();
    //将aggregations 转化为map
    Map<String, Aggregation> aggregationMap = aggregations.asMap();
    //通过key获取goods_brands 对象 使用Aggregation的子类接收 buckets属性在Terms接口中体现
    // Aggregation goods_brands1 = aggregationMap.get("goods_brands");
    Terms goods_brands =(Terms) aggregationMap.get("goods_brands");
    //获取buckets 数组集合
    List<? extends Terms.Bucket> buckets = goods_brands.getBuckets();
    Map<String,Object>map=new HashMap<>();
    //遍历buckets key 属性名,doc_count 统计聚合数
    for (Terms.Bucket bucket : buckets) {
        System.out.println(bucket.getKey());
        map.put(bucket.getKeyAsString(),bucket.getDocCount());
    }
    System.out.println(map);
}
高亮查询
高亮三要素:
高亮字段
前缀
后缀
默认前后缀 : em
<em> 手机 </em>
GET goods/_search
{
  "query": {
    "match": {
      "title": "电视"
    }
  },
  "highlight": {
    "fields": {
      "title": {
        "pre_tags": "<font color='red'>",
        "post_tags": "</font>"
      }
    }
  }
高亮查询 -JavaAPI
实施步骤:
高亮查询:
1. 设置高亮
        高亮字段
        前缀
        后缀
2. 将高亮了的字段数据,替换原有数据
/**
*
* 高亮查询:
* 1. 设置高亮
* * 高亮字段
* * 前缀
* * 后缀
* 2. 将高亮了的字段数据,替换原有数据
*/
@Test
public void testHighLightQuery() throws IOException {
    SearchRequest searchRequest = new SearchRequest("goods");
    SearchSourceBuilder sourceBulider = new SearchSourceBuilder();
    // 1. 查询title包含手机的数据
    MatchQueryBuilder query = QueryBuilders.matchQuery("title", "手机");
    sourceBulider.query(query);
    //设置高亮
    HighlightBuilder highlighter = new HighlightBuilder();
    //设置三要素
    highlighter.field("title");
    //设置前后缀标签
    highlighter.preTags("<font color='red'>");
    highlighter.postTags("</font>");
    //加载已经设置好的高亮配置
    sourceBulider.highlighter(highlighter);
    searchRequest.source(sourceBulider);
    SearchResponse searchResponse = client.search(searchRequest,
    RequestOptions.DEFAULT);
    SearchHits searchHits = searchResponse.getHits();
    //获取记录数
    long value = searchHits.getTotalHits().value;
    System.out.println("总记录数:"+value);
    List<Goods> goodsList = new ArrayList<>();
    SearchHit[] hits = searchHits.getHits();
    for (SearchHit hit : hits) {
        String sourceAsString = hit.getSourceAsString();
        //转为java
        Goods goods = JSON.parseObject(sourceAsString, Goods.class);
        // 获取高亮结果,替换goods中的title
        Map<String, HighlightField> highlightFields = hit.getHighlightFields();
        HighlightField HighlightField = highlightFields.get("title");
        Text[] fragments = HighlightField.fragments();
        //highlight title替换 替换goods中的title
        goods.setTitle(fragments[0].toString());
        goodsList.add(goods);
    }
    for (Goods goods : goodsList) {
        System.out.println(goods);
    }
}
重建索引&索引别名
#查询别名 默认别名无法查看,默认别名同索引名
GET goods/_alias/
#结果
{
    "goods" : {
        "aliases" : { }
    }
}
1. 新建 student_index_v1 索引
# -------重建索引-----------
# 新建student_index_v1。索引名称必须全部小写
PUT student_index_v1
{
    "mappings": {
        "properties": {
            "birthday":{
                "type": "date"
            }
        }
    }
}
#查看 student_index_v1 结构
GET student_index_v1
#添加数据
PUT student_index_v1/_doc/1
{
"birthday":"1999-11-11"
}
#查看数据
GET student_index_v1/_search
#添加数据
PUT student_index_v1/_doc/1
{
"birthday":"1999年11月11日"
}
2. 重建索引 : student_index_v1 数据拷贝到 student_index_v2
# 业务变更了,需要改变birthday字段的类型为text
# 1. 创建新的索引 student_index_v2
# 2. 将student_index_v1 数据拷贝到 student_index_v2
# 创建新的索引 student_index_v2
PUT student_index_v2
{
    "mappings": {
        "properties": {
            "birthday":{
                "type": "text"
            }
        }
    }
}
# 将student_index_v1 数据拷贝到 student_index_v2
# _reindex 拷贝数据
POST _reindex
{
    "source": {
        "index": "student_index_v1"
    },
    "dest": {
        "index": "student_index_v2"
    }
}
GET student_index_v2/_search
PUT student_index_v2/_doc/2
{
"birthday":"1999年11月11日"
}
3. 创建索引库别名:
注意: DELETE student_index_v1 这一操作将删除 student_index_v1 索引库,并不是删除别名
# 思考: 现在java代码中操作es,还是使用的实student_index_v1老的索引名称。
# 1. 改代码(不推荐)
# 2. 索引别名(推荐)
# 步骤:
# 0. 先删除student_index_v1
# 1. 给student_index_v2起个别名 student_index_v1
# 先删除student_index_v1
#DELETE student_index_v1 这一操作将删除student_index_v1索引库
#索引库默认的别名与索引库同名,无法删除
# 给student_index_v1起个别名 student_index_v11
POST student_index_v2/_alias/student_index_v11
#测试删除命令
POST /_aliases
{
    "actions": [
        {"remove": {"index": "student_index_v1", "alias": "student_index_v11"}}
    ]
}
# 给student_index_v2起个别名 student_index_v1
POST student_index_v2/_alias/student_index_v1
#查询别名
GET goods/_alias/
GET student_index_v1/_search
GET student_index_v2/_search

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jvm深入研究文档--程序执行专业户-虚拟机栈--jvm底层探索(2)

阿丹&#xff1a; JVM的内存分区包括以下几个部分&#xff1a; 堆区&#xff08;Heap&#xff09; - 这是JVM的主要部分&#xff0c;用于存储实例对象和大多数Java对象&#xff0c;如数组和用户定义的类。 方法区&#xff08;Method Area&#xff09; - 这是线程私有的&#x…

前端项目练习(练习-004-webpack-02)

学习前&#xff0c;首先&#xff0c;创建一个web-004项目&#xff0c;内容和web-003一样。&#xff08;注意将package.json中的name改为web-004&#xff09; 前面的例子&#xff0c;成功将js文件打包到了dist中&#xff0c;但是我们有三个文件&#xff0c;css&#xff0c;js和h…

微信公众号开发(BUG集)

1.微信公众平台接口错误:不合法的自定义菜单使用用户 地址&#xff1a;解决地址 2.微信公众平台接口错误:invalid ip 180.101.72.196 ipv6 ::ffff:180.101.72.196, not in whitelist rid: 6511420b-60c59249-01084d02 白名单离开放服务器IP

第六章 Scala if..else与循环

1 IF…ELSE 语句 Scala IF…ELSE 语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。 1.1 if 语句 if 语句有布尔表达式及之后的语句块组成。 if(布尔表达式) {// 如果布尔表达式为 true 则执行该语句块 }如果布尔表达式为 tru…

BUUCTF SimpleRev

题目&#xff1a;BUUCTF SimpleRev 查壳&#xff0c;没壳&#xff0c;64位 ida打开一通分析 main(): while ( 1 ){while ( 1 ){printf("Welcome to CTF game!\nPlease input d/D to start or input q/Q to quit this program: ");v4 getchar();if ( v4 ! 100 &…

Marvell/Cisco/Broadcom 三巨头的51.2T交换芯片

最近在恶补Freya产品100/200/400/800GE AN/LT端口自适应和链路学习的知识&#xff0c;主要用在基于56Gb/s 的400G&#xff0c;112GGb/s的800G&#xff0c;和1.6Tbps高速接口上&#xff0c;当其使用DAC/AEC/ACC cable时&#xff0c;如果实现端口性能的自动调整。好奇的去拓展了下…

浅谈低压电力电容器常见故障分析及预防措施

安科瑞 华楠 【摘要】为了可以有效实现提高电力电容器故障解决效率&#xff0c;就需要针对其故障诊断技术展开研究&#xff0c;而状态量监测作为提高故障诊断技术效率与质量重要因素&#xff0c;其对电力电容器故障诊断工作而言&#xff0c;有着重要影响意义。基于此&#xff…

多来客推出新版短视频矩阵系统,携手灰豚AI大模型引领行业革新。

9月20日&#xff0c;本地生活行业代表多来客本地生活服务saas系统又上线新版短视频矩阵群控功能&#xff0c;并引入灰豚ai大模型,为商家全面解决了矩阵群控营销的痛点。该系统为本地生活服务商业内首创。 短视频矩阵群控系统 多来客上线于2022年3月份,是国内著名的短视频平台本…

SpringBoot 学习(十)分布式理论

12. 分布式理论 12.1 简介 分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统。 分布式是一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统&#xff0c;其目的是利用更多的机器&#xff0c;处理更多的数据。 …

Vieworks首款采用CoF接口的工业相机亮相!

Vieworks首款CoF(CoaXPress-over-Fiber&#xff09;接口数字相机&#xff0c;具有高速度、高分辨率。 VC-21MDF-M/C460I在2100万全分辨率下可达到454fps的速率。CoF这个新接口支持传输高达80 Gbps的图像数据&#xff0c;加之配备Vieworks的创新技术&#xff0c;该相机不仅帧速…

钻孔主轴铝铸件微小孔φ2mm钻孔加工方案

随着工业技术的不断发展&#xff0c;铝铸件在现代制造业中发挥着越来越重要的作用。而在铝铸件的制造过程中&#xff0c;微小孔加工一直是一个重要而又具有挑战性的工艺。在这个过程中&#xff0c;钻孔主轴作为一种重要的工具&#xff0c;可以有效地完成铝铸件微小孔的加工。 …

[C++随笔录] list使用

list使用 构造函数insert && 迭代器push_back && pop_back && push_front && pop_fronterasesort && find && reverse list的底层结构就是 带头双向循环链表 构造函数 // 默认构造 list<int> lt; cout << "l…

PyQt5 自定义开关按钮(2)

效果展示 代码展示 from PyQt5.QtCore import Qt, pyqtSignal, QTimer, QRectF, QRect from PyQt5.QtGui import QFont, QColor, QPainter, QPainterPath from PyQt5.QtWidgets import QWidgetclass SwitchBtn(QWidget):clicked = pyqtSignal(bool)# 组件常量BORDER_WIDTH = 4…

【LeetCode-简单题】501. 二叉搜索树中的众数

文章目录 题目方法一&#xff1a;暴力哈希方法二&#xff1a;利用二叉搜索树的特性&#xff08;递归双指针&#xff09; 题目 方法一&#xff1a;暴力哈希 这是针对于普通二叉树的解法 统计number出现次数 然后将次数最大的众数集 取出来 Map<Integer , Integer > map …

世界前沿技术发展报告2023《世界信息技术发展报告》(五)先进计算技术

&#xff08;五&#xff09;先进计算技术 1. 概述2. 超级计算机2.1 美国首台E级超级计算机Crusher上线试运行2.2 欧洲最强大的超级计算机落成2.3 美国英伟达与微软公司联合开发人工智能超级计算机 3. 新型计算技术3.1 中国北京航空航天大学提出“混合概率逻辑计算”机制3.2 奥地…

港联证券:绿柱成交量放大什么意思?

这是许多股民常常遇到的问题。股票的价格涨跌往往与它的成交量有着紧密的联络&#xff0c;而绿柱扩展也意味着股票的成交量在上升&#xff0c;这或许是功德&#xff0c;也或许是坏事。本文将从不同角度评论绿柱成交量扩展的意义。 首要&#xff0c;关于绿柱扩展的情况&#xf…

负载均衡器监控

什么是负载均衡器 负载均衡建立在现有网络结构之上&#xff0c;它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行&#xff0c;例如Web服务器、FTP服务器、企…

MySQL数据库入门到精通7--进阶篇( InnoDB引擎)

6. InnoDB引擎 6.1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 1). 表空间 表空间是InnoDB存储引擎逻辑结构的最高层&#xff0c; 如果用户启用了参数 innodb_file_per_table(在 8.0版本中默认开启) &#xff0c;则每张表都会有一个表空间&#xff08;xxx.ibd&#xff0…

centos 6使用yum安装软件

1. 执行以下命令&#xff0c;查看当前操作系统 CentOS 版本。 cat /etc/centos-release返回结果如下图所示&#xff0c;则说明当前操作系统版本为 CentOS 6.9。 2. 执行以下命令&#xff0c;编辑 CentOS-Base.repo 和CentOS-Epel.repo文件。 vim /etc/yum.repos.d/CentOS-Bas…

三极管和MOS管抗静电?|深圳比创达EMC

抗静电为什么是三极管优于MOS&#xff1f;那么三极管和MOS管抗静电&#xff1f;接下来就跟着深圳比创达EMC小编一起来看下吧&#xff01; 首先要了解电子元件的特性&#xff0c;三极管是电流驱动元件&#xff0c;MOS管是电压驱动元件&#xff0c;为什么说MOS管用手触摸容易坏&a…