ElasticSearch学习笔记

2023-11-01

一.ES核心概念

elasticsearch 是面向文档的,一切都是 Json

ES关系型数据库的对比记忆:

ElasticSearch 关系型数据库
索引(indices) 数据库(database)
类型(types) 表(tables)
文档(documents) 行(rows)
字段(fields) 列(columns)

elasticsearch(集群)中可以包含多个索引(数据库),每个索引中包含多个类型(表),每个类型中包含多个文档(行),每个文档中包含多个字段(列)。
几个相关概念:

概念 说明
indices(索引库) indices是index的复数,代表许多的索引,
type(类型) 类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念
document(文档) 存入索引库原始的数据。比如每一条商品信息,就是一个文档
field(字段) 文档中的属性
mappings(映射配置) 字段的数据类型、属性、是否索引、是否存储等特性
node(节点) 节点就是es实例
cluster(集群) 一个集群有多个节点
shard(分片) 索引分片,es将一个完整的索引分为多个分片
replica(副本) 每个shard可以设置一定数量的副本,写入的文档同步给副本,副本可以提供查询功能,分摊系统的都负载

mapping支持的属性:

  • enabled:仅存储、不做搜索和聚合分析

    • "enabled":true (缺省)| false
      
  • index:是否构建倒排索引(即是否分词,设置false,字段将不会被索引)

    • "index": true(缺省)| false
      
  • index_option:存储倒排索引的哪些信息

    • "index_options": "docs"
      
      # 4个可选参数
          # docs:索引文档号
          # freqs:文档号+词频
          # positions:文档号+词频+位置,通常用来距离查询
          # offsets:文档号+词频+位置+偏移量,通常被使用在高亮字段
      # 分词字段默认时positions,其他默认时docs
      
  • norms:是否归一化相关参数、如果字段仅用于过滤和聚合分析、可关闭

    • "norms": {"enable": true, "loading": "lazy"}
      
      # 分词字段默认配置,不分词字段:默认{“enable”: false},存储长度因子和索引时boost,建议对需要参加评分字段使用,会额外增加内存消耗
      
  • doc_value:是否开启doc_value,用户聚合和排序分析

    • "doc_value": true(缺省)| false
      
      # 对not_analyzed字段,默认都是开启,分词字段不能使用,对排序和聚合能提升较大性能,节约内存
      
  • fielddata:是否为text类型启动fielddata,实现排序和聚合分析

    • "fielddata": {"format": "disabled"}
      
      # 针对分词字段,参与排序或聚合时能提高性能,不分词字段统一建议使用doc_value
      
  • store:是否在_source之外再独立存储一份,默认不存储。(因为_sourse已经存储了所有的字段)

    • "store": false(默认)| true
      
  • coerce:是否开启自动数据类型转换功能,比如:字符串转数字,浮点转整型

    • "coerce: true(缺省)| false"
      
  • multifields:灵活使用多字段解决多样的业务需求

  • dynamic:控制mapping的自动更新,(慎用!)

    • "dynamic": true(缺省)| false | strict
      
  • data_detection:是否自动识别日期类型

    • data_detection:true(缺省)| false
      
  • analyzer:指定分词器,默认分词器为standard analyzer

    • "analyzer": "ik"
      
  • boost:字段级别的分数加权,默认值是1.0 (5.0.0版本之后废弃)

    • "boost": 1.23
      
  • fields:可以对一个字段提供多种索引模式,同一个字段的值,一个分词,一个不分词

    • "fields": {"raw": {"type": "string", "index": "not_analyzed"}}
      
  • ignore_above:超过100个字符的文本,将会被忽略,不被索引

    • "ignore_above": 100
      
  • include_in_all:设置是否此字段包含在_all字段中,默认时true,除非index设置成no

    • "include_in_all": true
      
  • null_value:设置一些缺失字段的初始化,只有string可以使用,分词字段的null值也会被分词

    • "null_value": "NULL"
      
  • position_increament_gap:影响距离查询或近似查询,可以设置在多值字段的数据上或分词字段上,查询时可以指定slop间隔,默认值时100

    • "position_increament_gap": 0
      
  • search_analyzer:设置搜索时的分词器,默认跟analyzer是一致的,比如index时用standard+ngram,搜索时用standard用来完成自动提示功能

    • "search_analyzer": "ik"
      
  • similarity:默认时TF/IDF算法,指定一个字段评分策略,仅仅对字符串型和分词类型有效

    • "similarity": "BM25"
      
  • trem_vector:默认不存储向量信息,支持参数yes(term存储),with_positions(term+位置),with_offsets(term+偏移量),with_positions_offsets(term+位置+偏移量)对快速高亮fast vector highlighter能提升性能,但开启又会加大索引体积,不适合大数据量用

    • "trem_vector": "no"
      

mapping字段设置流程:
在这里插入图片描述

物理设计:

elasticsearch 在后台把每个索引划分为多个分片,每个分片可以在集群中的不同服务器间迁移。

要注意的是:Elasticsearch 本身就是分布式的,因此即便你只有一个节点,Elasticsearch 默认也会对你的数据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。

什么时候会触发分片?

  • 创建或者删除索引
  • 修改replica
  • 再均衡
  • 增减节点

逻辑设计:

elasticsearch 是面向文档的,所以在查找时,文档就是最小单位。当在索引中查找一个文档时,顺序为:索引 -> 类型 -> 文档ID,这里的文档ID是一个字符串,所以不必是整数。

倒排索引

博客文章(原始数据) 索引列表(倒排索引)
博客文章id 标签 标签 博客文章id
1 python python 1, 2, 3
2 python linux 3, 4
3 linux, python
4 linux

如果需要查找标签为linux的文章,只需要直接查找博客文章id为3,4 的就可以了。

二.IK分词器

ik分词器提供两种算法:ik_smartis_max_wordik_smart 表示最少切分,is_max_word 表示最细粒度划分

有时候我们会使用一些ik”没有见过的新词“,那么需要自己来将这些新词加入拓展分词词典中。具体方法:

  1. elasticsearch-7.6.2\plugins\ik\config目录下创建mywords.dic词典(名称可以自定义)
  2. elasticsearch-7.6.2\plugins\ik\config\IKAnalyzer.cfg.xml 添加创建的拓展词典文件的名称
    在这里插入图片描述

三. Rest 风格

1.基础命令

restful是一种软件架构风格,而不是标准,只提供一组设计原则和约束条件。

method url地址 描述
PUT localhost:9200/索引名称/类型名称/文档id 创建(指定id)文档
POST localhost:9200/索引名称/类型名称 创建(随机id)文档
POST localhost:9200/索引名称/类型名称/文档id/_update 修改文档
DELETE localhost:9200/索引名称/类型名称/文档id 删除文档
GET localhost:9200/索引名称/类型名称/文档id 查询文档
POST localhost:9200/索引名称/类型名称/_search 查询所有数据

2.测试命令(新建)

创建一个索引

PUT /索引名/类型名/文档id
{
	请求体
}

在这里插入图片描述

创建之后查看:
在这里插入图片描述

四.ES字段类型

一级分类 二级分类 具体类型
核心类型 字符串类型 string, text, keyword
整数类型 integer, long, short, byte
浮点类型 double, float, half_float, scaled_float
逻辑类型 boolean
日期类型 date
范围类型 range
二进制类型 binary
复合类型 数组类型 array
对象类型 object
嵌套类型 nested
地理类型 地理坐标类型 geo_point
地理地图 geo_shape
特殊类型 IP类型 ip
范围类型 completion
令牌计数类型 token_count
附件类型 attachment
抽取类型 percolator

string

字符串类型,es中最常用的类型,官方文档

比较重要的参数:

index分析

  • analyzed(默认)
  • not_analyzed
  • no

store存储

  • true 独立存储
  • false(默认)不存储,从_source中解析

Numeric

数值类型,注意numeric并不是一个类型,它包括多种类型,比如:long,integer,short,byte,double,float,每种的存储空间都是不一样的,一般默认推荐integerfloat官方文档参考

重要的参数:

index分析

  • not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
  • no

store存储

  • true 独立存储
  • false(默认)不存储,从_source中解析

date

日期类型,该类型可以接受一些常见的日期表达方式,官方文档参考

重要的参数:

index分析

  • not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
  • no

store存储

  • true 独立存储
  • false(默认)不存储,从_source中解析

format格式化

  • strict_date_optional_time||epoch_millis(默认)
  • 你也可以自定义格式化内容,比如
"date": {
  "type":   "date",
  "format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}

IP

这个类型可以用来标识IPV4的地址,官方文档参考

常用参数:

index分析

  • not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
  • no

store存储

  • true 独立存储
  • false(默认)不存储,从_source中解析

boolean

布尔类型,所有的类型都可以标识布尔类型,官方文档参考

  • False: 表示该值的有:false, “false”, “off”, “no”, “0”, “” (empty string), 0, 0.0
  • True: 所有非False的都是true

重要的参数:

index分析

  • not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
  • no

store存储

  • true 独立存储
  • false(默认)不存储,从_source中解析

五.索引规则

1.创建规则

PUT /索引名
{
	规则
}

如果设置文档类型,那么ES就会默认配置字段类型。

在这里插入图片描述

2.查看规则

GET 索引名(/类型名/文档名)

在这里插入图片描述

扩展:通过GET _cat/...命令可以获取es的很多当前信息。

例如:
在这里插入图片描述

六.修改

方法一:直接覆盖原文档

PUT /索引名/类型名/文档id
{
	请求体
}

在这里插入图片描述

这种方法的缺点是:修改时,请求体中需要带上原文档中的所有字段,否则原文档中的这些字段会被删除。

方法二:

POST /索引名/类型名/文档id/_update
{
	需要修改的字段
}

在这里插入图片描述

七.关于文档的基本操作

1.创建文档 PUT

PUT /索引名/类型名/文档id
{
	各个字段
}

在这里插入图片描述

查看elasticsearch-head:
在这里插入图片描述

2.更新文档 POST

POST /索引名/类型名/文档id/_update
{
	"doc": {
		需要修改的字段
	}
}

在这里插入图片描述

3.查询文档 GET

3.1查询某个文档

GET /索引名/类型名/文档id

在这里插入图片描述

3.2通过关键字查询

GET /索引名/类型名/_search?q=关键字1&关键字2

在这里插入图片描述

3.3通过请求体查询

GET /索引名/类型名/_search
{
	"query":{
		"查询规则":{
			字段
		}
	}
}

在这里插入图片描述

3.4限定返回字段查询

GET /索引名/类型名/_search
{
	"query":{
		"查询规则":{
			字段
		}
	},
	"_source": ["字段1","字段2"]
}

在这里插入图片描述

3.5排序查询

GET /索引名/类型名/_search
{
	"query":{
		"查询规则":{
			字段
		}
	},
	"sort": [
    {
      "FIELD": {
        "order": "desc"
      }
    }
  ]
}

在这里插入图片描述

3.6分页查询

GET /索引名/类型名/_search
{
  "query": {},
  "from": 0,
  "size": 20
}

其中,from 定义了目标数据的偏移值,size 定义当前返回的事件数目。

默认from为0,size为20,即所有的查询默认仅仅返回前20条数据。
在这里插入图片描述

3.7多条件查询

GET /索引名/类型名/_search
{
  "query": {
          "match": {
          "字段": "字段1值 字段2值 ..."
          },
  }
}

在这里插入图片描述

3.8 bool 查询

bool查询是一种复合查询方式,是由一个或多个布尔子句构建的,每个子句都有一个类型化的事件。具体类型是:

关键字 描述
must 必须匹配, 相当于mysql中的and
should 至少有一个匹配, 相当于mysql中的or
must_not 必须不匹配,相当于mysql中的not
filter 条件过滤
(1) must
GET /索引名/类型名/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "FIELD": "TEXT"
          }
        },
        {
          "match": {
            "FIELD": "TEXT"
          }
        }  
      ]
    }
  }
}

表示查询结果必须同时匹配 一个或多个字段,相当于where name=n and age=2
在这里插入图片描述

(2) should
GET /索引名/类型名/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "FIELD": "TEXT"
          }
        },
        {
          "match": {
            "FIELD": "TEXT"
          }
        }  
      ]
    }
  }
}

表示查询结果只需要匹配 任意一个字段,相当于where name=n or age=2
在这里插入图片描述

(3) must_not
GET /索引名/类型名/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "FIELD": "TEXT"
          }
        }  
      ]
    }
  }
}

表示查询结果必须不包含 一个或多个字段,相当于where name!=n
在这里插入图片描述

(4) filter
GET /索引名/类型名/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "FIELD": "TEXT"
          }
        }
      ], 
      "filter": [
        {"range": {
          "FIELD": {
            "gte": 10,
            "lte": 20
          }
        }}
      ]
    }
  }
}

对查询结果进行条件过滤
在这里插入图片描述

3.9 精确查询

term查询是直接通过倒排索引进行精确查找的,不进行分词器分析,文档中必须包含整个搜索的词汇
在这里插入图片描述

3.10 高亮查询

GET /索引名/类型名/_search
{
  "query": {}
  },
  "highlight": {
    "fields": {
      "字段":{}
    }
  }
}

在这里插入图片描述

自定义高亮条件:

"highlight": {
    "pre_tags": "<p class='key' style='color:red'>", 
    "post_tags": "</p>", 
    "fields": {
      "name":{}
    }

在这里插入图片描述

八.倒排索引

正排索引(正向索引,forword index):

​ 文档ID -> 单词1,单词2,…,单词n

倒排索引(反向索引,inverted index):

​ 单词x -> 文档1,文档2,…,文档n

正排索引 倒排索引
博客文章id 标签 标签 博客文章id
1 python python 1, 2, 3
2 python linux 3, 4
3 linux, python
4 linux
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch学习笔记 的相关文章

  • Docker 进程被神秘的“Killed”消息杀死

    在 docker 容器中运行 python 脚本 一切似乎都运行顺利 看到一些 STDOUT 消息 大约 5 分钟后我得到了Killed消息 没有进一步的解释 并且该过程停止 查询数据库可能是磁盘空间问题 也可能是 OOM 问题 我不确定
  • 关于使用Python启动SSH隧道的问题

    我在从用 Python 编写的 HTTP RPC 服务器启动 SSH 隧道时遇到了麻烦 基于Python的BaseHTTPServer 有一个用Python编写的简单的HTTP RPC服务器 作为其中一项服务的一部分 我想启动从 RPC 服
  • 使用 Marshmallow 中的数据更新行 (SQLAlchemy)

    我正在使用 Flask Flask SQLAlchemy Flask Marshmallow marshmallow sqlalchemy 尝试实现 REST api PUT 方法 我还没有找到任何使用 SQLA 和 Marshmallow
  • 如何配置散景图以具有响应宽度和固定高度

    我使用通过组件功能嵌入的散景 实际上我使用 plot sizing mode scale width 它根据宽度进行缩放并保持纵横比 但我想要一个响应宽度但固定或最大高度 这怎么可能实现呢 有stretch both and scale b
  • 错误只有 size-1 数组可以转换为 Python 标量

    我有这个代码 for a in data X for i in a if not i isdigit x hash i data X column row x row row 1 row 0 column column 1 desired
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • 在 Python 中比较日期 - 如何处理时区修饰符

    我正在做Python日期比较 假设我有一个这样的约会 Fri Aug 17 12 34 00 2012 0000 我按以下方式解析它 dt datetime strptime Fri Aug 17 12 34 00 2012 0000 a
  • 使用 Pandas 查找自滚动高点以来的周期数

    我在 Pandas 中使用rolling max函数 http pandas pydata org pandas docs stable computation html moving rolling statistics moments
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • 如何通过facebook-sdk python api获取用户帖子?

    我使用 facebook jssdk 授权我的应用程序读取用户个人资料和用户帖子 FB login function response scope user status user likes user photos user videos
  • 检查对象数组中的多个属性匹配

    我有一个对象数组 它们都是相同的对象类型 并且它们有多个属性 有没有办法返回一个较小的对象数组 其中所有属性都与测试用例 字符串匹配 无论该属性类型是什么 使用列表理解all http docs python org 3 library f
  • 将带有两层分隔符的字符串转换为字典 - python

    给定一个字符串 s x t1 ny t2 nz t3 我想转换成字典 sdic x 1 y 2 z 3 我通过这样做让它工作 sdic dict tuple j split t for j in i for i in s split n F
  • 散景中的时间序列流

    我想在散景中绘制实时时间序列 我只想在每次更新时绘制新的数据点 我怎样才能做到这一点 散景网站上有一个动画情节的示例 但它每次都需要重新绘制整个图片 另外 我正在寻找一个简单的示例 我可以在其中逐点绘制时间序列的实时绘图 散景效果0 11
  • Scrapy - 不会爬行

    我正在尝试运行递归爬行 由于我编写的爬行不能正常工作 因此我从网络上提取了一个示例并进行了尝试 我真的不知道问题出在哪里 但是爬行没有显示任何错误 谁能帮我这个 另外 是否有任何逐步调试工具可以帮助理解蜘蛛的爬行流程 非常感谢任何与此相关的
  • 从 subprocess.Popen 获取整个输出

    我通过调用 subprocess Popen 得到了一个有点奇怪的结果 我怀疑这与我对 Python 的陌生有很大关系 args cscript USERPROFILE tools jslint js USERPROFILE tools j
  • 对 pandas 数据框中的每一列应用函数

    我如何以更多的熊猫方式编写以下函数 def calculate df columns mean self df means for column in df columns columns tolist cleaned data self
  • 如何在 Pandas 数据框中用 NaN 替换一系列值?

    我有一个巨大的数据框 我应该如何用 NaN 替换一系列值 200 100 数据框 您可以使用pd DataFrame mask https pandas pydata org pandas docs stable generated pan
  • python IDLE shell 似乎无法正确处理一些转义

    例如 b 退格键打印为四元 在下面的示例中显示为 但是 n 换行是可以的 gt gt gt print abc bd abc d gt gt gt print abc nd abc d 我在 Vista pro python 2 7 下运行

随机推荐

  • PyTorch实现Softmax回归

    1 导入模块 import torch from torch utils data import DataLoader import torch nn as nn import torchvision datasets as Dataset
  • 3d效果技术java,java3D技术展示

    java3D技术依靠Java自身所带的API函数 来构建3D模型 不同于C 中的OpenGL函数 他显得跟简单 依靠观察者视觉的不同改变观察角度 主要是固定某些属性 通过mul函数合并属性 universe getViewingPlatfo
  • 在谈天津2023年高考压轴题:斯特林公式数列极限

    证明单调性 转化为数列极限问题 利用斯特林公式求极限
  • python _简易版本web_server

    学习目标 做个简易版的web server玩玩 学习内容 coding utf 8 import sys os subprocess from http server import BaseHTTPRequestHandler HTTPSe
  • 将两个列表转换成字典

    想象一下您有 keys name age food values Monty 42 spam 产生以下字典的最简单方法是什么 a dict name Monty age 42 food spam 1楼 您还可以在 2 7的Python中使用
  • Javassist操作方法总结

    参考手册 1 读取和输出字节码 ClassPool pool ClassPool getDefault 会从classpath中查询该类 CtClass cc pool get test Rectangle 设置 Rectangle的父类
  • 动态添加列 表格_只用过Excel表格?其实PowerBI中也有更强大的表格

    在PowerBI的可视化对象中 还有两个 表格 对象 表格的作用不仅可以在报表提供明细数据 还经常用来测试度量值的返回结果 因为它们使用起来十分简单 就是把字段拖进去就可以显示出来数据 看起来和Excel表格也没有什么不同 刚开始接触Pow
  • 从入门到放弃系列--如何成为全栈工程师01

    写个序言 计算机的书 有一个神秘的系列 不管写什么的 编程类的 比如 C语言 JAVA PHP 操作系统类的 比如windows98 2000 XP ME VISTA 7 8 10 LINUX 软件类的 比如word wps excel p
  • Cesium Terrain Builder 非压缩瓦片

    Cesium Terrain Builder 输出瓦片默认是zib压缩后的 在业务中如果传输不是问题 反而增加浏览器的解压处理 希望能支持输出非压缩瓦片 针对此需求 修改代码并重新编译 一 代码分析 1 输出数据对象 文件格式 主要为hei
  • 服务器上的文件怎么共享给学生机,云服务器对应学生机

    云服务器对应学生机 内容精选 换一换 当您创建的弹性云服务器规格无法满足业务需要时 可以变更云服务器规格 升级vCPU 内存 具体接口的使用 请参见本节内容 变更规格时 部分规格的之间不能互相变更 您可以参见查询云服务器规格变更支持列表查询
  • 重磅:饶毅正式举报裴钢院士!

    点击上方 CVer 选择加 星标 置顶 重磅干货 第一时间送达 来源 饶议科学 科技部 科奖中心 编辑 考博圈 学长 经过将近一年的严肃调查处理 1月21日 科研诚信建设联席会议联合工作机制发布 有关论文涉嫌造假调查处理情况的通报 以下简称
  • 【zedboard找不到COM串口bug】驱动下载地址

    今天在使用zedboard过程中出现了sdk终端没有COM串口的问题 解决方法见 zedboard串口bug最终解决办法 zynq开发 在SDK 终端Teminal找不到COM3 COM5等接口 无法连接uart串口 ZYNQ驱动问题 解决
  • 【源码】走一遍源码弄清ArrayList容器的扩容机制

    源码 走一遍源码弄清ArrayList容器的扩容机制 首先我们来看看ArraysList容器在整个Java集合框架中所处的位置 由此可见ArrayList是Java集合框架中 两大派系中Collection接口的子接口List的实现类 我们
  • 在macOS上搭建Flutter开发环境

    准备工作 1 下载flutter sdk 2 安装xcode 安装Android Studio 3 安装 Homebrew 安装fvm 安装adb 配置 1 环境变量配置 打开终端查看 ls a 1 打开 open bash profile
  • 作用域链的理解

    一 作用域 作用域又分为了 全局作用域 和 函数作用域 ES6 之前 JavaScript 没有块级作用域 只有全局作用域和函数作用域 ES6 的到来 为我们提供了 块级作用域 可通过新增命令 let 和 const 来体现 全局作用域 在
  • Hexo+next主题美化静态博客

    前言 需要在Hexo下配置next主题 Hexo配置next主题教程 点我跳转 更改配置以后使用素质三连 hexo clean hexo g hexo s即可本地看到效果 hexo clean hexo g hexo s 注 部分参考自互联
  • CSS3有趣的渐变色

    程序设计之道无远弗届 御晨风而返 杰佛瑞 詹姆士 这里给大家分享几个有趣的渐变色 用来丰富页面 一 背景色渐变 经常用的就是给背景色增加渐变效果 这里的语法顺序不要错 牵扯到优雅降级和渐进增强 标准语法写到最后也是为了兼容各个版本浏览器 让
  • curl命令的使用

    curl是利用URL语法在命令行方式下工作的开源文件传输工具 1 CURL URL 获取当个网页源码 默认将输出打印到标准输出中 curl www baidu com 2 CURL o O选项保存下载的文件到指定的文件中 o 将文件保存为命
  • AI工程师职业规划指南——中科院大牛告诉你如何成为一名语音识别工程师

    语音识别基础知识 数学与统计学 数学是所有学科的基础 其中的高等数学 数理方程 泛函分析等课程是必要的基础知识 概率论与数理统计也是语音识别的基础学科 声学与语言学 声学基础 理论声学 声学测量等是声学方面的基础课程 有助于了解更多声学领域
  • ElasticSearch学习笔记

    一 ES核心概念 elasticsearch 是面向文档的 一切都是 Json ES关系型数据库的对比记忆 ElasticSearch 关系型数据库 索引 indices 数据库 database 类型 types 表 tables 文档