Elasticsearch概览

首先这是一套关于elasticsearch7.0使用与探索的文章,主要面向对elasticsearch有一定了解的用户;和其它技术系列文章一样,在开始本系列探索之前,我们需要对ES(elasticsearch)进行下整理了解。

一、介绍:

一句话概述:

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功能。

es7.0还有很多新特性、新改进这里就不一一列举了,总之es7将是一个里程碑式的发布,我会在后面章节与大家一一介绍学习...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容