一、介绍:
一句话概述:

es是基于lucene分片(shard)存储的近实时的分布式搜索引擎。

名词解释:
Lucene:使用java语言编写的存储与查询框架,通过组织文档与文本关系信息进行倒排索引,内部形成多个segment段进行存储,是es的核心组件,但不具备分布式能力。

segment:Lucene内部最小的存储单元,也是es的最小存储单元,多个小segment可合为一个较大的segment,并但不能拆分。

shard:es为解决海量数据的处理能力,在Lucene之上设计了分片的概念,每个分片存储部分数据,分片可以设置多个副本,通过内部routing算法将数据路由到各个分片上,以支持分布式存储与查询。

近实时:严格讲es并不是索引即可见的数据库,首先数据会被写入主分片所在机器的内存中,再触发flush操作,形成一个新的segment数据段,只有flush到磁盘的数据才会被异步拉取到其它副本节点,如果本次搜索命中副本节点且数据没有同步的话,那么是不会被检索到的;es默认flush间隔是1s,也可通过修改refresh_interval参数来调整间隔(为提升性能和体验,一版设置30s-60s)。

分布式:es天生支持分布式,配置与使用上与单机版基本没什么区别,可快速扩张至上千台集群规模、支持PB级数据检索;通过内部路由算法将数据储存到不同节点的分片上;当用户发起一次查询时,首先会在各个分片上完成提前批处理(这个会在之后章节详细讲解),处理后的数据汇总到请求节点再做一次全局处理后返回。

当然,也有人将es定义为开箱即用的NoSql文档数据库,这么说也没错,es借助其平滑扩展的能力实现了nosql数据库对海量数据增删改查的能力,目前市面上基于文档存储的nosql数据库有MongoDB、couchbase、es、orientdb等,几种数据库都有其各自的使用场景,其中es与MongoDB备受国内开发人员青睐,社区活跃度极高,尤其es,最近一段时间平均每个月都要发布3-4个release版本,值得高兴的是今天es7.0也发布了。
二、Mapping&Setting

众所周知完成一个索引库的创建需要配置mapping与setting两部分;
mapping:

常用数据类型:text、keyword、number、array、range、boolean、date、geo_point、ip、nested、object

text:默认会进行分词,支持模糊查询(5.x之后版本string类型已废弃,请大家使用text)。
 keyword:不进行分词;keyword类型默认开启doc_values来加速聚合排序操作,占用了大量磁盘io 如非必须可以禁用doc_values。
 number:如果只有过滤场景 用不到range查询的话,使用keyword性能更佳,另外数字类型的doc_values比字符串更容易压缩。
 array:es不需要显示定义数组类型,只需要在插入数据时用'[]'表示即可,'[]'中的元素类型需保持一致。
 range:对数据的范围进行索引;目前支持 number range、date range 、ip range。
 boolean: 只接受true、false 也可以是字符串类型的“true”、“false”
 date:支持毫秒、根据指定的format解析对应的日期格式,内部以long类型存储。
 geo_point:存储经纬度数据对。
 ip:将ip数据存储在这种数据类型中,方便后期对ip字段的模糊与范围查询。
 nested:嵌套类型,一种特殊的object类型,存储object数组,可检索内部子项。
 object:嵌套类型,不支持数组。

es7.0新增数据类型:alias、date_nanos、features、vector

alias:并不实际存在,而是对已有字段的一种别名映射,搜索该字段与搜索实际字段返回的内容没有本质的区别。
date_nanos:另一种时间类型,可精确到纳秒,用法类似date。
features:用来存储特征向量,数据不能为0和负数,查询时只能使用rank_feature query,该字段主要为支持后续机器学习相关功能做准备。
vector:存储特征数组,支持稀疏与稠密向量存储,该字段主要为支持后续机器学习相关功能做准备。

doc_values:列式存储,为支持快速聚合与排序场景而设计,不在该类场景的可禁用

"user_id": {
          "type": "keyword",
          "doc_values": false
        }

index:控制字段索引方式

analyzed:先分词再索引
    not_analyzed:不分词直接索引
    no:不被索引

ignore_malformed:是否忽略脏数据

ignore_malformed设置为true,如果遇到数据格式或类型错误数据将被忽略,其它字段会正常插入
如果设置为false,一旦数据不符合要求整个文档将被拒绝。

_source:不需要回显数据内容的可选择禁用该字段

"_source": {
        "enabled": false
   }
需要注意的是禁用该项后将不能支持update和索引库的reindex操作,需谨慎。

includes&excludes:_source字段黑白名单控制,可控制哪些字段在查询结果的source中出现

"_source": {
        "includes": [
          "*.count",
          "meta.*"
        ],
        "excludes": [
          "meta.description",
          "meta.attributes.*"
        ]
      }

dynamic:动态mapping,禁用后将不会自动创建field,但数据仍可以正常插入

"dynamic":"false"

_all:es6.x默认已禁用全文索引,es7.0彻底移除该配置

"_all": {
       "enabled": false
     }

norms:控制该字段是否参与相关度排名计算,如果该字段只做过滤用可禁用该项以提升搜索性能

"categorys": {
      "type": "text",
      "norms": false
    }

index_options:细粒度控制倒排索引方式

docs:只索引文档id
freqs:文档id和词频,词频可用于评分
positions:增加位置信息,位置可用于模糊和短语查询
offsets:增加偏移量,高亮时会用到偏移量信息

setting:

"index.max_result_window":20000   #控制查询返回的最大结果数
    "index.merge.scheduler.max_thread_count": 2   #segment段合并时可使用的最大线程数,为避免过度的io操作,该值一般不超过2
    "index.routing.allocation.total_shards_per_node":10    #分配到单个节点的最大分片数
    "index.refresh_interval":"-1"    #index刷新频率,频繁刷新会降低性能,一般设置为30s-60s;-1表示禁用刷新
    "index.translog.durability":"async"    #translog刷新方式,如果对数据安全性要求不算太高,可设置为async以提升性能
    "index.translog.flush_threshold_size":"1024mb"    #translog刷新字节条件,超过1g才会刷新
    "index.translog.sync_interval":"120s"    #translog刷新时间条件,超过120s才会刷新
    "index.unassigned.node_left.delayed_timeout":"1d"    #当有节点宕机后索引库多久触发副本balance操作
    "index.search.slowlog.threshold.query.info":"1s"    #超过1s的查询会被记录到慢查询日志里
    "index.store.type":"niofs"    #网络通信协议
    "index.number_of_replicas":0    #index分片的副本数
    "index.number_of_shards":8    #index分片数,需要注意的是es7.0默认索引分片数调整为1了
    "index.codec":"best_compression"    #index数据的压缩方式,best_compression压缩可节省4-8倍的存储空间

三、elasticsearch7.0有哪些重大改进

1、彻底废弃多type支持,包括api层面,之前版本可在一个索引库下创建多个type。

2、彻底废弃_all字段支持,为提升性能默认不再支持全文检索,即7.0之后版本进行该项配置会报错。

3、新增应用程序主动监测功能,搭配对应的kibana版本,用户可监测应用服务的健康状态,并在出现问题后及时发出通知。

4、取消query结果中hits count的支持(聚合查询除外),使得查询性能大幅提升(3x-7x faster)。这意味着,每次查询后将不能得到精确的结果集数量。

5、新增intervals query ,用户可设置多字符串在文档中出现的先后顺序进行检索。

6、新增script_core ,通过此操作用户可以精确控制返回结果的score分值。

7、优化集群协调子系统,缩减配置项提升稳定性。

8、新增 alias、date_nanos、features、vector等数据类型。

9、7.0自带java环境,所以我们在安装es时不再需要单独下载和配置java_home。

10、7.0将不会再有OOM的情况,JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据量超出单机处理的最大内存限制时会被截断,并抛出异常(有点类似clickhouse)。

11、丰富多彩的kibana功能。

Elasticsearch7 mapping和setting简介相关推荐

  1. 一文搞懂Elasticsearch索引的mapping与setting

    目录 Elasticsearch索引结构 Mapping Setting Elasticsearch索引结构 一个Elasticsearch索引的主要结构如下: {"test_index&q ...

  2. [es7]在往elasticsearch插数据之前,mapping和setting要怎么配置呢?

    文章目录 中文常用es插件 mapping和setting settings和mappings的意义 mapping和setting的设置过程 ES的mapping如何用?什么时候需要手动,什么时候需 ...

  3. 玉米关联群体:NAM(Nested Association Mapping)群体简介(Edward S. Buckler,2009)

    本文内容主要摘自下面 3 篇文章:第一篇介绍了 NAM 群体的 构建 及玉米基因组的 重组特征:第二篇介绍了 计算机模拟 下 NAM 群体挖掘 QTL 的 效力:第三篇介绍了 NAM 群体的 应用,使 ...

  4. Elasticsearch7.x学习总结

    一.官网和下载 官网: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html Spring Data E ...

  5. elasticsearch-7.17.9

    1.ElasticSearch 1.1.概念 1.1.1.分片(shard) 1.分片 在ES中所有数据的文件块,也是数据的最小单元块,整个ES集群的核心就是对所有分片的分布.索引.负载.路由等达到惊 ...

  6. es-04-mapping和setting的建立

    mapping和setting, 使用java客户端比较难组装, 可以使用python或者scala 这儿直接在kibana中进行DSL创建 1, mapping 创建索引的时候, 可以事先对数据进行 ...

  7. PDCCH介绍—资源映射(Resource Mapping)

    NR Rel-15/16学习笔记 PDCCH 介绍-资源映射(Resource Mapping) 资源单位简介 资源单位之间的映射 REG到CORESET的映射 REG到REG bundle & ...

  8. ELK——ElasticStack日志分析平台

    ElasticStack日志分析平台 ELK日志采集与分析系统概述 重读日志文件 使用Processors(处理器)过滤和增强数据 Logstash Logstash安装 使用Grok过滤器插件解析W ...

  9. Elasticsearch安装以及语法学习

    一.简介 借助官网介绍 Elasticsearch简介 您知道,用于搜索(和分析) Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎.Logstash和Beats有助于 ...

  10. 09.snapshot and restore操作

    文章目录 1. es 快照(snapshot)简介 2. 快照(snapshot)的版本兼容 3. 快照(snapshot)仓库 repository 4.基于共享文件系统配置repository 5 ...

最新文章

  1. 隐藏tabwidgt 用radiogroup来实现tab的切换
  2. 模板上 php dede,织梦CMS模板中dede标签使用php和if判断语句的方法
  3. python t检验_讲讲统计学中T检验的种类
  4. CSS学习-网页导航栏
  5. 7款优秀的开源数据挖掘工具
  6. java面向对象(封装-继承-多态)
  7. Android中Text文本特效处理
  8. 【LeetCode】3月18日打卡-Day3
  9. Cognitive Surplus 认知盈余
  10. Android 设置网络代理
  11. centOS 手动部署 wekan
  12. 20162327WJH第一次实验——线性结构
  13. java连接打印机并进行打印
  14. ecu的c语言编程,ecu中的程序是如何编写的
  15. 怎么把腾讯视频qlv格式转成mp4格式
  16. java8 使用拉姆达对基本数据类型集合进行分组
  17. 信用卡3D验证相关资料
  18. python英语单词 扇贝英语安卓下载_扇贝单词英语版
  19. 博士员工离职率21.8%,任正非反思:华为这么大,英雄为何无用武之地?
  20. 企业级数据仓库PPT分享

热门文章

  1. JAVA系列---项目打包部署
  2. 概率论 方差公式_2020考研数学:概率论核心考点与常见题型(上)
  3. 苹果MAC系统常用软件 (BY 冷家锋)
  4. linux内核无法识别声卡,伪输出,检测不到集成声卡
  5. HTML5创意设计简历,35张设计师的创意个人简历信息图
  6. 骁龙200/400/600/800芯片型号对应及规格介绍
  7. OSX与iOS系统架构
  8. 太阳当空照-Windows服务化方式instsrv与srvany
  9. GOM引擎启动提示invalid filename怎么处理?
  10. 关于成型滤波器实现方式的简单比较