ES相关随手记

2023-11-18

ES相关随手记

一 基本操作

1. es三大属性:索引、映射、文档

1.1 索引:

查看 es 中所有的索引信息

GET /_cat/indices?v

创建 索引

PUT /products

创建 索引 指定库信息

PUT /products
{
  "settings": {
    "number_of_shards":1,
    "number_of_replicas":0
  }
}

#删除 索引

DELETE /products
1.2 映射:

es中的数据类型:

字符串类型:keyword(不分词)、text(会分词)

数字类型:integer、long

小数类型:float、double

布尔类型:boolean

日期类型:date

创建索引&映射

PUT /products
{
  "settings": {
    "number_of_shards":1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "id":{
        "type": "integer"
      },
      "title":{
        "type": "keyword"
      },
      "price":{
        "type": "double"
      },
      "created_at":{
        "type": "date"
      },
      "description":{
        "type": "text",
        # 设置指定的分词器
        "analyzer": "standard"
      }
    }
  }
}

查询某个索引的映射信息 mapping

GET /products/_mapping
1.3 文档:

添加文档操作 手动指定——id

POST /products/_doc/1
{
  "id":1,
  "title":"小浣熊",
  "price":0.5,
  "created_at":"2023-04-17",
  "description":"小浣熊真好吃"
}

添加文档操作 自动创建文档的 id Isn8jIcBRFWba4Ejbi2b

POST /products/_doc/
{
  "title":"日本豆",
  "price":1.5,
  "description":"日本豆很不错"
}

文档查询 基于 id查询

GET /products/_doc/1

删除文档 基于 id删除

DELETE /products/_doc/Isn8jIcBRFWba4Ejbi2b

更新文档 (注意:此种方式是 先删除后添加)

PUT /products/_doc/1
{
  "id":1,
  "title":"小浣熊",
  "price":0.5,
  "created_at":"2023-04-17",
  "description":"小浣熊真好吃,真好吃!!"
}

#更新文档 基于指定字段进行更新
POST /products/_doc/1/_update
{
  "doc":{
    "price":2.5
  }
}
1.3.2: 文档的批量操作

文档的批量操作 _bulk 关键字(“index”:新增、“update”:更新、“删除”:“delete”) 后面的json 不能被格式化

#index 代表新增,如果index后面没有指定_id就自动生成,如果指定了,就按指定的创建 I8kTjYcBRFWba4Ej8i30

POST /products/_doc/_bulk
{"index":{"_id":2}}
    {"id" : 2,"title" : "日本豆","price" : 1.8,"created_at" : "2023-04-15","description" : "日本豆真好吃,真好吃!!"}
{"index":{}}
   {"title" : "鱼豆腐","price" : 4.8,"created_at" : "2023-04-15","description" : "鱼豆腐真好吃,真好吃!!"}

文档批量操作 添加 更新 删除

POST /products/_doc/_bulk
{"index":{"_id":3}}
  {"id" : 3,"title" : "甜不辣","price" : 7.8,"created_at" : "2023-04-15","description" : "甜不辣真好吃,真好吃!!"}
{"update":{"_id":2}}
  {"doc":{"title":"小鱼豆腐"}}
{"delete":{"_id":"I8kTjYcBRFWba4Ej8i30"}}

二 高级查询

说明:
ES 中提供了一种强大的检索数据方式,这种检索方式称为:**Query DSL**<Domain Specified Language>(特殊领域的查询语言),Query DSL 是利用**Rest API传递JSON格式的请求体**(Request Body)数据与ES进行交互,这种方式的 丰富查询语言 让ES 检索变得更强大 更简洁。
1.查询所有

query DSL 语法 查询所有

GET /products/_doc/_search
{
  "query": {
    "match_all": {}
  }
}

GET /products/_search
{
  "query": {
    "match_all": {}
  }
}
2. term 基于关键词查询
  1. integer keyword double date 不分词

  2. text 类型 默认 es 标准分词器 中文 单字分词 英文单词分词

总结 :

​ 1.在Es 中除了text类型分词其余类型均不分词

  1. 在Es中默认使用标准分词 中文单字分词 英文单词分词
GET /products/_search
{
  "query": {
    "term": {
      "title": {
        "value": "小浣熊"
      }
    }
  }
}
3. range 范围查询
GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 5,
        "lte": 10
      }
    }
  }
}
4. prefix 前缀查询
GET /products/_search
{
  "query": {
    "prefix": {
      "description": {
        "value": "小"
      }
    }
  }
}
5. wildcard 通配符查询 ?只匹配一个字符 *匹配多个字符
GET /products/_search
{
  "query": {
    "wildcard": {
      "title": {
        "value": "小*"
      }
    }
  }
}
6. ids 多个id查询
GET /products/_search
{
  "query": {
    "ids": {
      "values": [1,2,3,4]
    }
  }
}
7. fuzzy 模糊查询
  • 注意:搜索关键词长度为2不允许存在模糊
  • 搜索关键词长度为3~5允许一次模糊
  • 搜索关键词长度大于5允许最大2次模糊
GET /products/_search
{
  "query": {
    "fuzzy": {
      "title": "小浣熊1356"
    }
  }
}
8. bool 用来组合多个条件实现复杂查询

bool关键字:用来组合多个条件实现复杂查询

  • must:相当于&& 同时成立
  • should:相当于|| 成立一个就行
  • must_not:相当于!不能满足任何一个`
GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {
        "prefix": {
          "title": {
            "value": "小浣熊"
          }
        }
      },
      {
        "term": {
          "title": {
            "value": "小浣熊"
          }
        }
      }
      ]
    }
  }
}
9. multi_match 多字段查询

注意:字段类型分词,将查询条件分词之后进行查询该字段,若果该字不分词就会将查询条件作为整体进行查询

GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "浣熊",
      "fields": ["title","description"]
    }
  }
}
10. query_string 默认字段分词查询

注意:查询字段分词就查询条件分词查询,查询字段不分词将查询条件不分词查询

GET /products/_search
{
  "query": {
    "query_string": {
      "default_field": "description",
      "query": "小浣熊真"
    }
  }
}
11. highlight 高亮查询
  • highlight关键字 可以让符合条件的文档的关键词高亮
  • 自定义高亮html标签:可以在highlight中使用pre_tags和post_tags
GET /products/_search
{
  "query": {
      "multi_match": {
      "query": "浣熊",
      "fields": ["title","description"]
    }
  },
  "highlight": {
    "fields": {
      "*":{}
    },
    "pre_tags": ["<span style='color:red;'>"],
    "post_tags": ["</span>"]
  }
}

12. size 返回指定条数

size关键字:指定查询结果中返回指定条数。默认返回10条

GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "size": 2
}
13. from 分页查询

from关键字:用来指定起始返回位置,和size关键字连用可以实现分页效果

GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "from": 3,
  "size": 3
}
14. sort指定字段排序
GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ]
}
15. _source 返回指定字段

_source关键字:是一个数组,在数组当中用来指定需要展示的字段

GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["title","description","id"]
}

三 索引原理之倒排索引

​ 倒排索引 也叫反向索引,有反向索引必有正向索引。通俗的来说,正向索引是通过key找value,反向索引则是通过value找key,ES底层在检索时底层就是使用的倒排索引。

得分的计算 次数/长度 1:1:9 (索引:次数:总长度)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0mJzonr-1681885668819)(C:\Users\LiBo\AppData\Roaming\Typora\typora-user-images\image-20230417153722334.png)]

四 ik分词器

说明:下载ik分词器之后,放在es的插件文件夹下,重启es

1.分词器测试
# 分词器测试
# ik ik_smart 粗分词
POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "某某教育存在一名非常优秀的老师他的名字叫张三"
}

# ik ik_smart 粗分词 分词结果
{
  "tokens" : [
    {
      "token" : "某某",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "教育",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "存在",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "一名",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "非常",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "优秀的",
      "start_offset" : 10,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "老师",
      "start_offset" : 13,
      "end_offset" : 15,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "他的",
      "start_offset" : 15,
      "end_offset" : 17,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "名字叫",
      "start_offset" : 17,
      "end_offset" : 20,
      "type" : "CN_WORD",
      "position" : 8
    },
    {
      "token" : "张三",
      "start_offset" : 20,
      "end_offset" : 22,
      "type" : "CN_WORD",
      "position" : 9
    }
  ]
}
# ik ik_max_word 细分
POST /_analyze
{
  "analyzer": "ik_max_word",
  "text": "某某教育存在一名非常优秀的老师他的名字叫张三"
}
# ik ik_max_word 细分 分词结果
{
  "tokens" : [
    {
      "token" : "某某",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "某",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "某",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "教育",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "教",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "育",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "CN_CHAR",
      "position" : 5
    },
    {
      "token" : "存在",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "在一",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "一名",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 8
    },
    {
      "token" : "一",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 9
    },
    {
      "token" : "名",
      "start_offset" : 7,
      "end_offset" : 8,
      "type" : "CN_CHAR",
      "position" : 10
    },
    {
      "token" : "非常",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "CN_WORD",
      "position" : 11
    },
    {
      "token" : "非",
      "start_offset" : 8,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 12
    },
    {
      "token" : "常",
      "start_offset" : 9,
      "end_offset" : 10,
      "type" : "CN_CHAR",
      "position" : 13
    },
    {
      "token" : "优秀的",
      "start_offset" : 10,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 14
    },
    {
      "token" : "优秀",
      "start_offset" : 10,
      "end_offset" : 12,
      "type" : "CN_WORD",
      "position" : 15
    },
    {
      "token" : "老师",
      "start_offset" : 13,
      "end_offset" : 15,
      "type" : "CN_WORD",
      "position" : 16
    },
    {
      "token" : "他的名字",
      "start_offset" : 15,
      "end_offset" : 19,
      "type" : "CN_WORD",
      "position" : 17
    },
    {
      "token" : "他的",
      "start_offset" : 15,
      "end_offset" : 17,
      "type" : "CN_WORD",
      "position" : 18
    },
    {
      "token" : "名字叫",
      "start_offset" : 17,
      "end_offset" : 20,
      "type" : "CN_WORD",
      "position" : 19
    },
    {
      "token" : "名字",
      "start_offset" : 17,
      "end_offset" : 19,
      "type" : "CN_WORD",
      "position" : 20
    },
    {
      "token" : "字",
      "start_offset" : 18,
      "end_offset" : 19,
      "type" : "CN_WORD",
      "position" : 21
    },
    {
      "token" : "叫",
      "start_offset" : 19,
      "end_offset" : 20,
      "type" : "CN_CHAR",
      "position" : 22
    },
    {
      "token" : "张三",
      "start_offset" : 20,
      "end_offset" : 22,
      "type" : "CN_WORD",
      "position" : 23
    },
    {
      "token" : "三",
      "start_offset" : 21,
      "end_offset" : 22,
      "type" : "TYPE_CNUM",
      "position" : 24
    }
  ]
}
2.分词器扩展

​ 在ik分词器的安装目录下的config下 IKAnalyzer.cfg.xml 文件下配置;配置完之后需要重启es

其中 ext.dic 和 stop.dic 需要在config文件夹下创建,并且需要每一个词一行进行记录

系统推荐的 extra_main.dic 扩展词

系统推荐的停用词典 extra_stopword.dic

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict">ext.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">stop.dic</entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

五 过滤查询

1.说明

过滤查询,其实准确来说,ES中的查询操作分为2种: 查询(query)过滤(filter)。查询即是之前提到的 query查询,它(查询)默认会计算每个返回文档的得分,然后根据得分排序。而 过滤(filter) 只会筛选出符合的文档,并不计算 得分,而且它可以缓存文档。所以,单从性能考虑,过滤比查询更快。 换句话说、过滤适合在大范围筛选数据,而查询则适合精确匹配数据。一般应用时,应先使用过滤操作过滤数据,然后使用查询匹配数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M8aENp8P-1681885668820)(C:\Users\LiBo\AppData\Roaming\Typora\typora-user-images\image-20230419092443574.png)]

2.使用
GET /test123/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}} // 查询条件
      ],
      "filter": [
        {。。。。。。}// 过滤条件
      ]
    }
  }
}

注意

  • 在执行 filter 和 query 时,先执行 filter 在执行 query
  • Elasticsearch会自动缓存经常使用的过滤器,以加快性能

常见过滤类型有: term 、 terms 、ranage、exists、ids等filter。

1.term
GET /test123/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}}
      ],
      "filter": [
        {
          "term": {
            "title": "真好"
          }
        }
      ]
    }
  }
}

2. terms
GET /test123/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}}
      ],
      "filter": [
        {
          "terms": {
            "title": [
              "真好",
              "food"
            ]
          }
        }
      ]
    }
  }
}
3. range
GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "range": {
            "price": {
              "gte": 5,
              "lte": 10
            }
          }
        }
      ]
    }
  }
}

4. exists
GET /test123/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}}
      ],
      "filter": [
        {
          "exists": {
            "field": "title"
          }
        }
      ]
    }
  }
}
5. ids
GET /test123/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}}
      ],
      "filter": [
        {
          "ids": {
            "values": [
              "1","2","3"
            ]
          }
        }
      ]
    }
  }
}

3. range

GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "range": {
            "price": {
              "gte": 5,
              "lte": 10
            }
          }
        }
      ]
    }
  }
}

4. exists
GET /test123/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}}
      ],
      "filter": [
        {
          "exists": {
            "field": "title"
          }
        }
      ]
    }
  }
}
5. ids
GET /test123/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}}
      ],
      "filter": [
        {
          "ids": {
            "values": [
              "1","2","3"
            ]
          }
        }
      ]
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES相关随手记 的相关文章

  • 重构——套接字中的良好实践——简单的服务器-客户端 Swing 应用程序

    我使用单例和观察者模式编写了一个带有 Swing 接口的简单服务器 客户端程序 每个客户端都连接到服务器并可以发送消息 服务器将其收到的消息转发给其余的客户端 客户端使用 GUI 允许它们随时连接和断开与服务器的连接 该程序运行得很好 因为
  • 如何降低圈复杂度?

    我正在开发一个将 RequestDTO 发送到 Web 服务的类 我需要在发送请求之前验证该请求 请求可以从 3 个不同的地方发送 并且每个 请求类型 有不同的验证规则 例如请求1必须有姓名和电话号码 请求2必须有地址等 我有一个 DTO
  • 以点作为分隔符分割字符串

    我想知道我是否要在一个字符串上分割字符串 正确的方式 我的代码是 String fn filename split return fn 0 我只需要字符串的第一部分 这就是我返回第一项的原因 我问这个是因为我在 API 中注意到 意味着任何
  • WebLogic 10 中的临时目录

    每当 WL 停止时 它都不会删除其临时目录 即 domains mydomain servers myserver tmp WL TEMP APP DOWNLOADS domains mydomain servers myserver tm
  • 使用 JAXB 编组 LocalDate

    我正在构建一系列链接类 我希望能够将其实例编组到 XML 以便我可以将它们保存到文件中并稍后再次读取它们 目前我使用以下代码作为测试用例 import javax xml bind annotation import javax xml b
  • JAX-WS:有状态 WS 在独立进程中失败

    我在 Tomcat 上部署了一个有状态的 Web 服务 它由工厂服务和主要 API 服务组成 并且工作得很好 工厂服务将 W3CEndpointReference 返回到主 API 实例 客户端使用会话 现在 我尝试将相同的服务作为独立应用
  • 此版本不符合 Google Play 64 位要求,添加库后仍然出现错误

    我正在 Play 商店上传一个视频编辑器应用程序 其中包含带有一些本机代码的库 所以我通过将其添加到 gradle 来使其兼容 64 位 ndk abiFilters armeabi v7a arm64 v8a x86 x86 64 添加了
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • 如何在命令提示符中检查 JAVA_OPTS 值?

    我们的应用程序部署 JBoss 服务器然后抛出错误 PermGen space 然后在 jboss bat 和配置文件中设置 permgen 变量中的 java OPTS JAVA OPTs 中是否有值 assige 如何检查 如何在命令提
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • XSLT:我们可以使用abs值吗?

    我想知道在 XSLT 中我们是否可以使用 math abs 我在某处看到过这个 但它不起作用 我有类似的东西
  • 在 netBeans 中运行程序时,字体看起来非常奇怪

    我在我的新 MacBook M1 上设置了 netBeans 和 SceneBuilder 除了运行程序时的字体外 一切正常 它看起来像这样 我不知道为什么 按钮应显示 Click me 标签应显示 Hello 我收到的错误消息是 M rz
  • 如何将任务添加到 gradle 中的主要“构建”任务

    当我尝试使用以下代码将任务添加到主构建任务时 rootProject tasks getByName build dependsOn mytask 当我跑步时它抱怨gradle w build输出 Where Build file line
  • Jenkins 管道和 java.nio.file.* 方法的问题

    我正在尝试使用 java nio file 中的方法在 Jenkins 管道中执行一些基本文件操作 无论代码存在于哪个节点块中 代码都在主节点上执行 在管道中 我已经验证了各个节点块都是正确的 它们唯一地标识了特定的节点 但是 pathEx
  • 设计抽象类时是否应该考虑序列化问题?

    一般来说这个问题来自Eclipse建议在抽象类上添加串行版本UID 由于该类是抽象类 因此该类的实例永远不会存在 因此它们永远不会被序列化 只有派生类才会被序列化 所以我的问题是放置一个安全 SuppressWarnings serial
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • Java中的媒体播放器库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在评估用于在 Java 中播放音频 视频的库 它不需要 100 Java Java 与本机库的绑定
  • java数据结构模拟数据树

    我需要帮助定义使用什么方法 我有一个 SOAP 响应 给我一个 xml 文件 我需要在屏幕上显示 3 个相关列表 当您在第一个列表中选择一个项目时 相应的选择将出现在第二个列表中 依此类推 我只对从 xml 流中提取数据后如何有效地组织数据
  • 从 node.js 创建对 AWS ES 实例的有效签名请求

    我试图找到一个示例 说明如何连接到 Node js 中的 AWS ES 实例 然后通过一个简单的请求访问 ES 集群 我正在尝试使用elasticsearch节点包 https www npmjs com package elasticse
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN

随机推荐

  • 打印数字三角及蛇形矩阵(C语言)

    题目描述 从键盘输入N 输出如下图所示的N行的数字三角 例如 N 5 那么输出如下 输入格式 输入一个整数N 1 lt N lt 45 输出格式 输出如题所示的数字三角形 为了输出美观 每个数字栈5个字符位 右对齐 即 5d 解题的思路 1
  • ISP(五) RGB、YUV与YCbCr的概念详解

    一 概念 首先要说明RGB YUV和YCbCr都是人为规定的彩色模型或颜色空间 有时也叫彩色系统或彩色空间 它的用途是在某些标准下用通常可接受的方式对彩色加以描述 1 RGB 红绿蓝 是依据人眼识别的颜色定义出的空间 可表示大部分颜色 但在
  • 浅谈逻辑漏洞中的越权访问漏洞

    越权漏洞 越权访问漏洞示意图 一 越权访问漏洞简介 1 类型 水平越权 通过更换的某个ID之类的身份标识 从而使A账号获得 增删查改 B账号的数据 垂直越权 使用低权限身份的账号 发送高权限账号的请求 获得其高权限的操作 未授权访问 通过删
  • Vue--ElementUI组件库

    1 概述 Element官网 ElementUI是饿了么前端团队推出的一款基于Vue桌面端UI框架 和Boostrap一样对原生的HTML标签进行了封装 美化 让我们能够专注于业务逻辑而不是UI界面 默认情况下无论我们有没有使用到某个组件
  • JVM类加载器的urlclassloader和appclassloader

    package kite jvm import java net URL 首先为什么 1 可以 因为OneURLClassLoader在加载Constant的时候发现需要加载 OneInterface 因为他是其接口 因为OneURLCla
  • merkle tree

    merkle tree 是用来存储hash值的一棵树 其叶子是数据块的hash值 非叶子节点是其对应子节点的串联字符串的hash hash是一个把任意长度数据映射成固定长度的函数 对于数据完整性校验 最简单的方法是对整个数据做Hash运算得
  • elasticsearch对数组进行搜索

    写在前面 我们在进行全文建搜的时候往往会添加很多前置条件 比如地区 时间 以及知识点树 我们需要在搜索之前先进行过滤在进行搜索 Array索引 es的数据类型中实际上是不包含数组类型的 在默认的情况下任何字段都可以包含0或者是更多的值 并且
  • docker配置nginx

    docker配置nginx 1 首先安装nginx镜像 docker pull nginx 安装好可以选择测试 也可以跳过 测试命令两行 docker run name nginx test p 80 80 d nginx docker s
  • OC 6702升压型恒流驱动芯片, ESOP8 封装,内置 100V 功率 MOS

    概述 OC 6702 是一款内置 100V 功率 NMOS 高效率 高精度的升压型大功率 LED 恒流驱动芯片 OC6702 采用固定关断时间的控制方 式 关断时间可通过外部电容进行调节 工作频率可根据用户要求而改变 OC6702 通过调节
  • 判断一个对象是否有空的属性值

    直接上代码 const trim str gt const newStr str 0 str str toString return newStr newStr replace s s g str 判断一个对象是否有空的属性值 const
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • Java JDK8 Stream 使用详解

    Stream 流 的 筛选 去重 截取跳过映射 合并多个流 匹配 归约 简单示例 1 什么是流 2 流的特点 3 流的操作种类 4 流的操作过程 5 使用流 1 什么是流 流是Java8引入的全新概念 它用来处理集合中的数据 暂且可以把它理
  • [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL s

    背景 想导入一个别人的项目 却发现使用navicat运行数据库批次文件时出现了错误 爆出了这样的错误 Err 1064 You have an error in your SQL syntax check the manual that c
  • uniapp的tab切换自定义组件封装

    一 创建组件 在存放组件的文件夹新建一个 vue文件 二 使用子组件
  • 并不是所有的程序员都适合做技术管理

    CSDN记者 张勇 写在之前 在CSDN博客闲逛时无意间进入一个博客 博客地址 博客里的文章质量很高 文章话题主要涉及程序员素养和管理 文章有翻译也有原创 看了几篇文章之后 突然很想和这篇博名为 呦呦鹿鸣 签名则引用孟子 穷则独善其身 达则
  • js 字符串与二维数组间的转化

    1 字符串转二维数组 var a 1 2 3 4 5 a b c d e y1 y2 y3 y4 y5 var str eval a alert str 0 3 结果 4 2 二维数组转字符串 var b 1 2 a b function
  • 云原生之使用Docker部署Dashdot服务器仪表盘

    云原生之使用Docker部署Dashdot服务器仪表盘 一 Dashdot介绍 二 检查本地系统环境 1 检查本地系统版本 2 检查docker状态 3 检查docker版本 三 下载Dashdot镜像 四 部署Dashdot应用 1 创建
  • oracle存储过程----存储过程执行简单的增删改查sql

    存储过程执行简单的增删改查sql 上一篇文章 oracle存储过程 变量的介绍及使用 PL SQL 下边是一个简单的数据库表 为了方便 我都定义成了varchar 类型 1 存储过程执行增加sql 首先写一个增加的存储过程 create o
  • MQTT学习笔记——MQTT协议使用

    http mosquitto org files source mosquitto 1 4 5 tar gz 安装出错时openssl等 需要更改 cd mosquitto 1 4vi config mk可以选择去掉SSL的功能 可以参考h
  • ES相关随手记

    ES相关随手记 一 基本操作 1 es三大属性 索引 映射 文档 1 1 索引 查看 es 中所有的索引信息 GET cat indices v 创建 索引 PUT products 创建 索引 指定库信息 PUT products set