Elasticsearch分布式全文搜索引擎

2023-11-12


一、Elasticsearch 是什么?


Elasticsearch是一个基于Lucene的搜索服务器,简称为ES。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

二、ES安装


Elasticsearch 的官方地址:https://www.elastic.co/cn/
选择 7.8.0 版本

1、安装软件

Windows 版的 Elasticsearch 的安装很简单,解压即安装完毕,解压后的 Elasticsearch 的
在这里插入图片描述

目录 含义
bin 可执行脚本目录
jdk 内置 JDK 目录
lib 类库
logs 日志目录
modules 模块目录
plugins 插件目录

解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务
在这里插入图片描述
注意:9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 http协议 RESTful 端口。


输入地址:http://localhost:9200,测试结果
在这里插入图片描述

2、启动失败问题解决

  1. Elasticsearch 是使用 java 开发的,且 7.8 版本的 ES 需要 JDK 版本 1.8 以上,默认安装 包带有 jdk环境,如果系统配置 JAVA_HOME,那么使用系统默认的 JDK,如果没有配 置使用自带的 JDK,一般建议使用系统配置的 JDK。

  1. 双击启动窗口闪退,通过路径访问追踪错误,如果是“空间不足”,请修改 config/jvm.options 配置文件
# 设置 JVM 初始内存为 1G。此值可以设置与-Xmx 相同,以避免每次垃圾回收完成后 JVM 重新分配内存
# Xms represents the initial size of total heap space
# 设置 JVM 最大可用内存为 1G
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g

三、ES入门

1、数据格式

ES是面向文档型数据库,一条数据在这里就是一个文档。为了方便理解,
将 ES里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比
在这里插入图片描述
ES 里的 Index 可以看做一个库,而 Types 相当于表,Documents 则相当于表的行。
这里 Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能包含一个
type,Elasticsearch 7.X 中, Type 的概念已经被删除了。

2、索引

1.创建索引

对比关系型数据库,创建索引就等同于创建数据库
Postman 中,向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/shopping
在这里插入图片描述
请求后,服务器返回响应
在这里插入图片描述

{
 "acknowledged"【响应结果】: true, # true 操作成功
 "shards_acknowledged"【分片结果】: true, # 分片操作成功
 "index"【索引名称】: "shopping"
}
# 注意:创建索引库的分片数默认 1 片,在 7.0.0 之前的 Elasticsearch 版本中,默认 5

如果重复添加索引,会返回错误信息
在这里插入图片描述
2.查看所有索引

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/_cat/indices?v
在这里插入图片描述

这里请求路径中的_cat 表示查看的意思,indices 表示索引,所以整体含义就是查看当前 ES

服务器中的所有索引,就好像 MySQL 中的 show tables 的感觉,服务器响应结果如下
在这里插入图片描述
在这里插入图片描述

3. 查看单个索引
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/shopping
在这里插入图片描述
查看索引向 ES 服务器发送的请求路径和创建索引是一致的。但是 HTTP 方法不一致。这里
可以体会一下 RESTful 的意义,
请求后,服务器响应结果如下:
在这里插入图片描述

{
 "shopping"【索引名】: { 
 "aliases"【别名】: {},
 "mappings"【映射】: {},
 "settings"【设置】: {
 "index"【设置 - 索引】: {
 "creation_date"【设置 - 索引 - 创建时间】: "1614265373911",
 "number_of_shards"【设置 - 索引 - 主分片数量】: "1",
 "number_of_replicas"【设置 - 索引 - 副分片数量】: "1",
 "uuid"【设置 - 索引 - 唯一标识】: "eI5wemRERTumxGCc1bAk2A",
 "version"【设置 - 索引 - 版本】: {
 "created": "7080099"
 },
 "provided_name"【设置 - 索引 - 名称】: "shopping"
 }
 }
 } }

4.删除索引
在 Postman 中,向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/shopping
在这里插入图片描述
在这里插入图片描述
重新访问索引时,服务器返回响应:索引不存在

在这里插入图片描述

3、文档操作

1.创建文档

索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式

在 Postman 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/doc

请求体内容为:

{
 "title":"小米手机",
 "category":"小米",
 "images":"http://www.gulixueyuan.com/xm.jpg",
 "price":3999.00
}

在这里插入图片描述

此处发送请求的方式必须为 POST,不能是 PUT,否则会发生错误
在这里插入图片描述
服务器响应结果如下:

在这里插入图片描述

{
 "_index"【索引】: "shopping",
 "_type"【类型-文档】: "_doc",
 "_id"【唯一标识】: "Xhsa2ncBlvF_7lxyCE9G", #可以类比为 MySQL 中的主键,随机生成
 "_version"【版本】: 1,
 "result"【结果】: "created", #这里的 create 表示创建成功
 "_shards"【分片】: {
 "total"【分片 - 总数】: 2,
 "successful"【分片 - 成功】: 1,
 "failed"【分片 - 失败】: 0
 },
 "_seq_no": 0,
 "_primary_term": 1
}

上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机生成一个。
如果想要自定义唯一性标识,需要在创建时指定:http://127.0.0.1:9200/shopping/_doc/1
在这里插入图片描述
在这里插入图片描述
此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为 PUT

2.查看文档
查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/shopping/_doc/1
在这里插入图片描述
查询成功后,服务器响应结果:
在这里插入图片描述

{
 "_index"【索引】: "shopping",
 "_type"【文档类型】: "_doc",
 "_id": "1",
 "_version": 2,
 "_seq_no": 2,
 "_primary_term": 2,
 "found"【查询结果】: true, # true 表示查找到,false 表示未查找到
 "_source"【文档源信息】: {
 "title": "华为手机",
 "category": "华为",
 "images": "http://www.gulixueyuan.com/hw.jpg",
 "price": 4999.00
 } }

3.修改文档
和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖在 Postman 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_doc/1
请求体内容为
修改成功后,服务器响应结果:
在这里插入图片描述
在这里插入图片描述

{
 "_index": "shopping",
 "_type": "_doc",
 "_id": "1",
 "_version"【版本】: 2,
 "result"【结果】: "updated", # updated 表示数据被更新
 "_shards": {
 "total": 2,
 "successful": 1,
 "failed": 0
 },
 "_seq_no": 2,
 "_primary_term": 2
}

4.修改字段
修改数据时,也可以只修改某一给条数据的局部信息
在 Postman 中,向 ES 服务器发 POST 请求http://127.0.0.1:9200/shopping/_update/1
请求体内容为:

{ 
 "doc": {
 "price":3000.00
 } 
}

修改成功后,服务器响应结果:
在这里插入图片描述

根据唯一性标识,查询文档数据,文档数据已经更新
在这里插入图片描述

5.删除文档
删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。
在 Postman 中,向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/shopping/_doc/1

在这里插入图片描述

删除成功,服务器响应结果:在这里插入图片描述

{
 "_index": "shopping",
 "_type": "_doc",
 "_id": "1",
 "_version"【版本】: 4, #对数据的操作,都会更新版本
 "result"【结果】: "deleted", # deleted 表示数据被标记为删除
 "_shards": {
 "total": 2,
 "successful": 1,
 "failed": 0
 },
 "_seq_no": 4,
 "_primary_term": 2
}

删除后再查询当前文档信息
在这里插入图片描述
如果删除一个并不存在的文档
在这里插入图片描述

{
 "_index": "shopping",
 "_type": "_doc",
 "_id": "1",
 "_version": 1,
 "result"【结果】: "not_found", # not_found 表示未查找到
 "_shards": {
 "total": 2,
 "successful": 1,
 "failed": 0
 },
 "_seq_no": 5,
 "_primary_term": 2
}

6.条件删除文档
一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数据进行删除
向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_delete_by_query

请求体内容为:

{
 "query":{
 "match":{
 "price":4000.00
 }
 } }

在这里插入图片描述
删除成功后,服务器响应结果:在这里插入图片描述

{
 "took"【耗时】: 175,
 "timed_out"【是否超时】: false,
 "total"【总数】: 2,
 "deleted"【删除数量】: 2,
 "batches": 1,
 "version_conflicts": 0,
 "noops": 0,
 "retries": {
 "bulk": 0,
 "search": 0
 },
 "throttled_millis": 0,
 "requests_per_second": -1.0,
 "throttled_until_millis": 0,
 "failures": []
}

4、映射操作

  • 有了索引库,等于有了数据库中的 database。
  • 接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)。
    创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型
    下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。

1.创建映射

在 Postman 中,向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/student/_mapping

请求体内容为:

{
 "properties": {
 "name":{
 "type": "text",
 "index": true
 },
 "sex":{
 "type": "text",
 "index": false
 },
 "age":{
 "type": "long",
 "index": false
 }
 } }

在这里插入图片描述
服务器响应结果如下:
在这里插入图片描述
映射数据说明:

  • 字段名:任意填写,下面指定许多属性,例如:title、subtitle、images、price
  • type:类型,Elasticsearch 中支持的数据类型非常丰富,说几个关键的:
  • String 类型,又分两种:text:可分词,keyword:不可分词,数据会作为完整字段进行匹配
  • Numerical:数值类型,分两类
  • 基本数据类型:long、integer、short、byte、double、float、half_float
  • 浮点数的高精度类型:scaled_float
  • Date:日期类型
  • Array:数组类型
  • Object:对象
  • index:是否索引,默认为 true,也就是说你不进行任何配置,所有字段都会被索引。
  • true:字段会被索引,则可以用来进行搜索
  • false:字段不会被索引,不能用来搜索
  • store:是否将数据进行独立存储,默认为 false 原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储
    的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置 “store”: true
    即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用 更多的空间,所以要根据实际业务需求来设置。
  • analyzer:分词器,这里的 ik_max_word 即使用 ik 分词器

2、查看映射

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_mapping
在这里插入图片描述
服务器响应结果如下:
在这里插入图片描述

3.索引映射关联

在 Postman 中,向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/student1

{
 "settings": {},
 "mappings": {
 "properties": {
"name":{
 "type": "text",
 "index": true
 
},
"sex":{
 "type": "text",
 "index": false
},
"age":{
 "type": "long",
 "index": false
}
 }
 } }

在这里插入图片描述
服务器响应结果如下:
在这里插入图片描述

5、高级查询

Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询

1.查询所有文档

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "match_all": {}
 } }
# "query":这里的 query 代表一个查询对象,里面可以有不同的查询属性
# "match_all":查询类型,例如:match_all(代表查询所有), match,term , range 等等
# {查询条件}:查询条件会根据类型的不同,写法也有差异

在这里插入图片描述

服务器响应结果如下:
在这里插入图片描述
在这里插入图片描述

 "took【查询花费时间,单位毫秒】" : 1116,
 "timed_out【是否超时】" : false,
 "_shards【分片信息】" : {
 "total【总数】" : 1,
 "successful【成功】" : 1,
 "skipped【忽略】" : 0,
 "failed【失败】" : 0
 },
 "hits【搜索命中结果】" : {
 "total"【搜索条件匹配的文档总数】: {
 "value"【总命中计数的值】: 3,
 "relation"【计数规则】: "eq" # eq 表示计数准确, gte 表示计数不准确
 },
 "max_score【匹配度分值】" : 1.0,
 "hits【命中结果集合】" : [
 。。。
 }
 ]
 } }

2. 匹配查询

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search
在这里插入图片描述
服务器响应结果为:
在这里插入图片描述
3.字段匹配查询

multi_match 与 match 类似,不同的是它可以在多个字段中查询。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "multi_match": {
 "query": "zhangsan",
 "fields": ["name","nickname"]
 }
 } }

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
4.关键字精确查询

term 查询,精确的关键词匹配查询,不对查询条件进行分词。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "term": {
 "name": {
 "value": "zhangsan"
 }
 }
 } }

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
5.多关键字精确查询

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。
如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于 mysql 的 in
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "terms": {
 "name": ["zhangsan","lisi"]
 }
 } }

服务器响应结果:
在这里插入图片描述
6.指定查询字段

默认情况下,Elasticsearch 在搜索的结果中,会把文档中保存在_source 的所有字段都返回。
如果我们只想获取其中的部分字段,我们可以添加_source 的过滤
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "_source": ["name","nickname"], 
 "query": {
 "terms": {
 "nickname": ["zhangsan"]
 }
 } }

在这里插入图片描述

服务器响应结果:
在这里插入图片描述
7. 过滤字段

我们也可以通过:

  • includes:来指定想要显示的字段
  • excludes:来指定不想要显示的字段

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "_source": {
 "includes": ["name","nickname"]
 }, 
 "query": {
 "terms": {
 "nickname": ["zhangsan"]
 }
 } }

在这里插入图片描述
服务器响应结果:在这里插入图片描述
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

 "_source": {
 "excludes": ["name","nickname"]
 }, 
 "query": {
 "terms": {
 "nickname": ["zhangsan"]
 }
 } }

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
8. 组合查询

bool把各种其它查询通过must(必须 )、must_not(必须不)、should(应该)的方
式进行组合

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "bool": {
 "must": [
 {
 "match": {
 "name": "zhangsan"
 }
 }
 ],
 "must_not": [
 {
 "match": {
 "age": "40"
 }
 }
 ],
 "should": [
 {
 "match": {
 "sex": "男"
 }
 }
 ]
 }
 } }

服务器响应结果:
在这里插入图片描述
9.范围查询
range 查询找出那些落在指定区间内的数字或者时间。range 查询允许以下字符
在这里插入图片描述
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "range": {
 "age": {
 "gte": 30,
 "lte": 35
 }
 }
 } }

在这里插入图片描述
服务器响应结果:在这里插入图片描述
10.模糊查询

返回包含与搜索字词相似的字词的文档。
编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:

  • 更改字符(box → fox)
  • 删除字符(black → lack)
  • 插入字符(sic → sick)
  • 转置两个相邻字符(act → cat)

为了找到相似的术语,fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体
或扩展。然后查询返回每个扩展的完全匹配。
通过 fuzziness 修改编辑距离。一般使用默认值 AUTO,根据术语的长度生成编辑距离。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "fuzzy": {
 "name": {
 "value": "zhangsan"
 }
 }
 } }

在这里插入图片描述
服务器响应结果:
在这里插入图片描述

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "fuzzy": {
 "title": {
 "value": "zhangsan",
"fuzziness": 2 
 }
 }
 } }

在这里插入图片描述
服务器响应结果:在这里插入图片描述
11.单字段排序

sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc
升序。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

 "query": {
 "match": {
 "name":"zhangsan"
 }
 },
 "sort": [{
 "age": {
 "order":"desc"
 }
 }]
}

在这里插入图片描述
服务器响应结果:在这里插入图片描述
12.多字段排序

假定我们想要结合使用 age 和 _score 进行查询,并且匹配的结果首先按照年龄排序,然后
按照相关性得分排序
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "match_all": {}
 },
 "sort": [
 {
 "age": {
 "order": "desc"
 }
 },
 {
 "_score":{
 "order": "desc"
 }
 }
 ] }

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
13.高亮查询

在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮

在这里插入图片描述
Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。
在使用 match 查询的同时,加上一个 highlight 属性:

  • pre_tags:前置标签

  • post_tags:后置标签

  • fields:需要高亮的字段

  • title:这里声明 title 字段需要高亮,后面可以为这个字段设置特有配置,也可以空

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "match": {
 "name": "zhangsan"
 }
 },
 "highlight": {
 "pre_tags": "<font color='red'>",
 "post_tags": "</font>",
 "fields": {
 "name": {}
 }
 } }

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
14. 分页查询

from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size
size:每页显示多少条
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "query": {
 "match_all": {}
 },
 "sort": [
 {
 "age": {
 "order": "desc"
 }
 }
 ],
 "from": 0,
 "size": 2
}

在这里插入图片描述
服务器响应结果:
在这里插入图片描述
15. 聚合查询

聚合允许使用者对 es 文档进行统计分析,类似与关系型数据库中的 group by,当然还有很
多其他的聚合,例如取最大值、平均值等等。

对某个字段取最大值 max

{
 "aggs":{
 "max_age":{
 "max":{"field":"age"}
 }
 },
 "size":0
}

在这里插入图片描述
服务器响应结果:在这里插入图片描述

对某个字段取最小值 min

{
 "aggs":{
 "min_age":{
 "min":{"field":"age"}
 }
 },
 "size":0
}

在这里插入图片描述
服务器响应结果:
在这里插入图片描述

对某个字段求和 sum
在这里插入图片描述
服务器响应结果:在这里插入图片描述
对某个字段取平均值 avg

{
 "aggs":{
 "avg_age":{
 "avg":{"field":"age"}
 }
 },
 "size":0
}

服务器响应结果:
在这里插入图片描述

对某个字段的值进行去重之后再取总数

{
 "aggs":{
 "distinct_age":{
 "cardinality":{"field":"age"}
 }
 },
 "size":0
}

服务器响应结果:在这里插入图片描述
State 聚合
stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "aggs":{
 "stats_age":{
 "stats":{"field":"age"}
 }
 },
 "size":0
}

服务器响应结果:在这里插入图片描述

16.桶聚合查询

桶聚和相当于 sql 中的 group by 语句
terms 聚合,分组统计
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
 "aggs":{
 "age_groupby":{
 "terms":{"field":"age"}
 }
 },
 "size":0
}

服务器响应结果:
在这里插入图片描述
在 terms 分组下再进行聚合
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search
在这里插入图片描述
服务器响应结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch分布式全文搜索引擎 的相关文章

  • java中判断一个数是否为偶数

    package Day3 import com sun java swing plaf windows WindowsTabbedPaneUI public class Day03 Tast04 public static void mai
  • C#的数据类型

    C 的数据类型 1 整数类型 sbyte System SByte 8位有符号整数 short System Int16 16位有符号整数 int System Int32 32位有符号整数 long System Int64 64位有符号
  • 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统

    作者 寒小阳 时间 2016年3月 出处 http blog csdn net han xiaoyang article details 50856583 声明 版权所有 转载请联系作者并注明出处 1 引言 本系统是基于CVPR2015的论
  • openwrt 的常用指令

    https wiki openwrt org zh cn doc howto user beginner cli
  • C、C++内存对齐

    文章转载自 http www jellythink com archives 413 include
  • 【Spring基础】@Configuration和@Import

    起因 偶然间 用到了 Configuration创建Bean 对于 Configuration又学到了一些知识点 单例模式 网上查资料 理解有误差 以为单例模式一个类只有一个实例 只能创建一个Bean 但是如果同一个类需要创建多个对象的时候
  • spring boot上传文件-参数注入对象

    1 pom xml依赖
  • Spring mvc4使用jackson绑定controller返回

    1 spring MVC4以上 使用的json包有变更 2 使用之前的json包出现Java lang NoClassDefFoundError com fasterxml jackson core JsonProcessingExcept
  • IDEA中项目结构出现:0% classes,0% lines covered ,怎样去除?

    文章目录 1 现象 2 原因分析 3 去除解决 1 现象 IDEA中项目结构出现 0 classes 0 lines covered 2 原因分析 我是在启动项目的时候 点击了下图按钮 run with coverage 这是可以进行覆盖率
  • (大集合)Linux进程和线程的基本编程、通讯和例程【杂记】

    Linux 进程 和 线程 的基本 编程 通讯 和 例程 注 杂记 系列为日常网搜资料的堆砌而积累成之 如有错误恭谢指出 标识为 原创 其实不完全是 只是多引用再整理和加上自己的理解 进行记录备查 大都引自网络 侵删 大量参考 100ask
  • Yarn基础知识(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 Yarn架构 Yarn集群有一个ResourceManager 每台
  • 基于vue实现钉钉审批流程(仿)

    做项目有个需求 实现审批流程 看了钉钉审批流感觉功能很强大 模仿其实现审批效果 效果图 没有找到windows录制视频转gif的软件 所以只能放一张静图了 有好的软件欢迎各位积极分享 代码位置 整个流程上传至github https git
  • 数据库字段为什么要使用NOT NULL

    目录 1 对程序的影响 2 对查询结果的影响 2 1 聚合函数count 不准确 2 1 与 失效 2 3 NULL与其他值运算结果为NULL 2 4 对distinct group by order by等排序结果的影响 3 对索引的影响
  • html文本延迟加载,LazyLoad 延迟加载(按需加载)

    1 实际需求 大型网站往往很矛盾 想用户在首页看到更多东西 又不想浪费太多服务器流量 比如一个有3屏的首页 可能50 的用户进首页的目的是点击首页的连接 到子页面 那么我们的网站却为100 的用户加载了 3个 屏幕的所有内容 如果可以按需加
  • HIT-ICS2019大作业-程序人生-Hello’s P2P

    HIT ICS2019大作业 程序人生 Hello s P2P 摘 要 本文以一个简单的C程序hello c为楔子描绘了从预处理一直到I O管理的计算机的内部原理 将计算机对程序的处理过程生动地展现在人们眼前 关键词 hello 程序 P2
  • 1157:哥德巴赫猜想(C C++)

    题目描述 哥德巴赫猜想的命题之一是 大于6 的偶数等于两个素数之和 编程将6 100所有偶数表示成两个素数之和 输入 无 输出 分行输出 例如 6 3 3 8 3 5 每个数只拆开一次 请保证第一个加数最小 输入样例 无 输出样例 无 代码
  • Simulink 学习(一)

    一 基本操作 Simulink多用于仿真 分为模块 输入 输出 matlab中 有两种方法打开 第一种就如图所示 第二种直接在命令窗口输入 simulink 模块库 例如 常量倍数放大利用Math Oprations中的Gain模块 双击可
  • koa-view架构分析

    根据后端的模板引擎渲染到模板上 如ejs 安装 npm install koa views save registry https registry npm taobao org 安装ejs npm install ejs save reg
  • Gin框架使用Casbin进行用户权限校验

    以下是测试项目目录 一 配置model conf casbin rbac model conf 请求 request definition r sub obj act sub gt 想要访问资源的用户角色 Subject 请求实体 obj

随机推荐

  • TensorFlow学习笔记2-Anaconda下安装matplotlib的方法

    文章在下述博文的基础上删减 http blog csdn net abvedu article details 54731713 安装好Anaconda后 在Anaconda Prompt下执行conda命令安装matplotlib包 执行
  • JavaScript 宏任务和微任务

    JavaScript 宏观任务和微观任务 概念 宏观任务 宿主发起的任务为宏观任务 如setTimeout setInterval setImmediate I O 微观任务 JavaScript引擎发起的任务为微观任务 如Promise
  • 计算机组成原理——指令系统题库

    指令系统题库 选择题 1 以下有关指令系统的说法中错误的是什么 A 指令系统是一台机器硬件能执行的指令全体 B 任何程序运行前都要先转化为机器语言 C 指令系统是计算机软件 硬件的界面 D 指令系统和机器语言是无关的 2 在CPU执行指令的
  • tip消息定时弹窗功能 核心代码

    for var i 0 i lt 5 i var j 0 var arr 1 2 5 7 8 setTimeout function console log arr j i 3000
  • 深度学习与神经网络笔记

    在正式学习之前 首先清楚一下当前出现了很多次的概念是什么 这些概念之间的关系是什么 人工智能 AI 研究 开发用于模拟 延伸和扩展人的智能的理论 方法 技术和应用系统的一门新的技术科学 机器学习 实现人工智能的一种途径 以机器学习为手段解决
  • 《现代C++教程》笔记(2)

    2 语言可用性的强化 2 1 常量 nullptr 问题 C 不允许直接将 void 隐式转换到其他类型 但如果编译器尝试把 NULL 定义为 void 0 那么在下面这句代码中 char ch NULL 没有了 void 隐式转换的 C
  • 处理系统装机后BitLocker锁硬盘问题

    处理系统装机后BitLocker锁硬盘问题 今天重装公司里面的电脑发现装好后系统的D E盘被BitLocker锁住了 然后总结出了以下两种解决方法 可能不是非常详细但是还是希望可以对大家有所帮助 文章目录 处理系统装机后BitLocker锁
  • 总结使用Unity3D优化游戏运行性能的经验

    一 遇到麻烦时要调用 垃圾回收器 Garbage Collector 无用单元收集程序 以下简称GC 由于具有C C 游戏编程背景 我们并不习惯无用单元收集程序的特定行为 确保自动清理你不用的内存 这种做法在刚开始时很好 但很快你就公发现自
  • 2021-06-20

    TIM2 PWM部分初始化 PWM输出初始化 arr 自动重装值 psc 时钟预分频数 void TIM2 PWM Init u16 arr u16 psc GPIO InitTypeDef GPIO InitStructure TIM T
  • Symbol类型详解

    Symbol类型详解 symbol类型通过Symbol函数生成 用于表示独一无二的值 不使用new关键字 直接调用即可创建 例 const s Symbol str 即使使用相同的字符串来创建Symbol类型的值 这些值也是不同的 symb
  • 基于MATLAB GUI的裂缝检测(识别)系统(支持向量机)

    主要内容 本文对裂缝检测技术进行了深入研究 并结合裂缝图像的特征 提出了一种基于传统机器学习和图像处理技术的裂缝检测方法 实现裂缝基本参数的计算和显示 内容如下 1 裂缝图像采集 无人机 2 裂缝图像预处理 3 裂缝分割 提取 裂缝连接 4
  • 【Spring学习03】Spring简单入门实例

    本文博客地址 http blog csdn net soonfly article details 68498742 转载请注明出处 国际惯例 从一个简单的例子入门 轻松了解依赖注入 拿之前提到的场景 假设我们开发了一套管理系统 每收到一笔
  • GPS纠偏算法,适用于google,高德体系的地图

    GPS纠偏算法 适用于google 高德体系的地图 精确度还比较高 我试了一下比高德本身的纠偏还精确点 gps纠偏算法 适用于google 高德体系的地图 author Administrator public class GpsCorre
  • IOS H5 输入框输入后不显示内容,需要失焦后才显示

    input 框输入文本后 还在 focus 的状态 输入的内容显示空白 点击完成失去焦点后内容才出来 解决方案 input 框增加一个样式 transform translateZ 0
  • C++ : 矩阵初等行变换,化成最简矩阵

    化成最简矩阵分成如下步骤 从矩阵的第 i 0 行开始化简 1 寻找最长元素行 从第i行开始 寻找第一个开头行元素非0的行 利用行交换把该行换到矩阵的第i行 2 对第i行进行化简 对第i行的所有元素同除该行的首个非0元素 3 矩阵行化简 从矩
  • linux系统日志查看-停止-继续

    linux系统日志查看 停止 继续 查看日志实时刷新 tail f 文件名 查看显示1000行 tail 1000f 文件名 查看暂停刷新 按键 Ctrl s 查看继续刷新 按键 Ctrl q 查看尾部最后100行 tail n 10 te
  • c语音动态内存分配,内存重新分配,内存释放,指针运算

    c语音基础 中的基础 大神请直接关闭本页面 多谢合作 总结下这学习到的知识点 define CRT SECURE NO WARNINGS include
  • Windows 10快速在指定目录打开命令行

    一 我们在想要到达的目录上按住shift键并点击鼠标右键 看到了吗 这时候在弹出菜单里多了一个选项 就是 在此处打开命令窗口 我们点开看一下 二 不过有时候我们需要以管理员的权限来打开命令行 这时候我们需要自行添加一个脚本 方便操作 你可以
  • 蓝桥杯 排列序数

    标题 排列序数 X星系的某次考古活动发现了史前智能痕迹 这是一些用来计数的符号 经过分析它的计数规律如下 为了表示方便 我们把这些奇怪的符号用a q代替 abcdefghijklmnopq 表示0 abcdefghijklmnoqp 表示1
  • Elasticsearch分布式全文搜索引擎

    文章目录 一 Elasticsearch 是什么 二 ES安装 1 安装软件 2 启动失败问题解决 三 ES入门 1 数据格式 2 索引 3 文档操作 4 映射操作 5 高级查询 一 Elasticsearch 是什么 Elasticsea