上篇提到选择了elasticsearch ES作为专业化搜索引擎的核心,这篇讨论一下ES的基本结构和应用概念。首先,从硬结构方面来讲:ES是在一个集群(cluster)环境里运行的,所以ES应该具备高可用和高扩展特性,因为系统可以分布在机器内无数个节点(node)服务器上运行。ES的索引(index)分布在集群中各node上。ES的index又可以向下分成多个shard分片。因为ES是基于lucent的,ES的shard就是一个完整的lucent index。所以,ES index是一个shard集合,也就是lucent index集合。在定义ES index时必须指定该index的shard(primary)数量,之后不得修改。这就意味着每个ES index需要占用一个以上shard,而shard是ES index操作的最小单元,也就是说一个shard只能存放一种ES index索引文件(document)。

在ES7之前的版本表面上每个index里又分不同的document type,可以分辨不同类型的document。但因为ES index是shard集合,或者lucent index集合,而lucent index并没有document type的概念,基本上是一种nosql (schemaless)存储结构,所以ES7之后就取消了_type这层,其结果就变成每个ES index只能容许一种document操作。

很多人认为ES也是数据库系统,ES7之前普遍认识是:index -> database, type -> table, document -> row。ES7之后在某种意义上index就是table了。所以:把ES作为应用系统的数据库来使用是大大不妥的。因为应用系统由众多数据表组成关系数据库,在ES上就意味着必须构建众多的index,会出现大量的细小shard(table)分布在集群节点上,严重影响效率。

ES7是个集群体系:cluster->nodes->index->shards。shard又分primary shard和replica shard  (pshard,rshard)。一般来说pshard和rshard相互应分布在不同的node上。所有写操作由pshard负责,或者说先在pshard上执行后再把结果分发到隶属各rshard。读取操作采取就近读取策略以实现快速响应。

ES的底层操作是由lucent实现的。在lucent操作时shard又被细分一层到segment:luccent shard是由多个segment组成的,lucent的写操作先写入一块缓存(write-buffer),然后以一种提交形式再以一个segment为单元存写入shard。

ES是某种nosql数据库,但在存写数据时又对数据,特别是字符text类型的数据进行了分拆处理,所以ES存写即是更新索引indexing。从另一个角度说明:ES是一个索引容器(index container),是一个完整封闭的容器。index的构建、维护、使用等都是通过ES提供的一些工具软件以及一套HTTP-api来实现的。数据输入可以用工具(如logstash)进行批次型的indexing,实时indexing是通过HTTP-api实现的。

ES自带一套REST-api可以对index进行更新、搜索、统计、提取。

ES-REST-api的功能可以说是相当全面,但复杂、不易掌握、使用要求门槛高,且不易作为系统整合工具。为了实现ES在行业IT系统的普遍应用,应该绕过复杂的ES-REST-api,在ES之上设计一套连接ES-HTTP通道的REST-api作为ES和前端(web,mobile)的桥梁,把前端搜索条件翻译成ES JSON格式的搜索指令发送至ES,然后对搜索结果进行简化、筛选处理,以某种简洁通用的格式呈现给前端。最终目的其实是为了降低前端开发人员引用ES的技术门槛。

search(1)- elasticsearch结构概念相关推荐

  1. lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)

    1.Lucene和elasticsearch的前世今生 lucene,最先进.功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理 ...

  2. 大白话ElasticSearch入门概念,看不懂找我!

    点击上方蓝色"胖滚猪学编程",选择"设为星标" 跟着胖滚猪学编程!好玩!有趣! 这是胖滚猪ES系列博文第三篇,大白话ElasticSearch入门概念. 阅读本 ...

  3. 【Linux 内核】SMP 对称多处理器结构 ( SMP 对称多处理器结构概念 | SMP 对称多处理器结构的优势与缺陷 | Linux 内核兼容多处理器要求 )

    文章目录 一.SMP 对称多处理器结构概念 二.SMP 对称多处理器结构的优势与缺陷 三.Linux 内核兼容多处理器要求 一.SMP 对称多处理器结构概念 对称多处理器结构 , 英文名称为 &quo ...

  4. QML 编程之旅 -- QML程序的基本结构概念

    文章目录 QML 文档的构成 QML基本语法 QML 编程之旅 – QML程序的基本结构概念 学习Qt编程快近一年了,的确是项目驱动,让我不得不咬紧牙关,需要快速的学习掌握一门新的技术.编程是一个非常 ...

  5. 【JY|理念】结构概念设计之(设计理念进展)

    不犹豫 即关注 "通俗讲概念设计" 这一期给大家带来 结构设计理念进展与结构概念的依我之见. 首先讲下结构概念设计,概念设计一般是指不经数值计算,尤其在一些难以作出精确理性分析或在 ...

  6. java语言保留结构和联合_Java 语言中取消了联合概念,保留了结构概念。( )_学小易找答案...

    [单选题]Graves病最严重的临床表现是 [判断题]Java 语言中取消了联合概念,保留了结构概念.( ) [单选题]下列关于子类继承父类的成员的描述中,错误的是 . [多选题]冯.诺依曼机确立计算 ...

  7. 【JY】结构概念设计之(隔震概念设计)

    一.抗震与隔震概述 在地震过程中,造成人员伤亡和财产损失的主要原因是建筑结构的破坏和倒塌(楼板落地是倒塌的标志).因此,要减少或避免地震灾害的重要途径是增加建筑结构的抗震能力,使建筑结构在地震作用下少 ...

  8. Elastic Search 介绍和基本概念

    Elastic Search 特点 Elastic Search 可能是是当下最火的搜索引擎中间件了.为什么这么火呢?主要是因为他有几大绝艺: 快速.无论什么时候,你需要向 ES 查询你的数据,都能够 ...

  9. Elasticsearch 基本概念

    文章目录 1.存储结构 1.1 index 1.2 type 1.3 document 1.4 field 1.5 mapping limit dynamic 2.集群概念 2.1 cluster 2 ...

最新文章

  1. opencv-python 9.4 拆分及合并图像通道
  2. Android高级模糊技术RenderScript和FastBlur
  3. junit jndi_使用Spring创建用于JUnit测试的JNDI资源
  4. 玫瑰花函数matlab,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...
  5. 数据结构课上笔记14
  6. TiKV 源码解析系列 - Raft 的优化
  7. SpringMvc-参数为数组
  8. 3D引擎多线程:资源异步加载
  9. banner图/轮播图----html
  10. ADAS技术市场总结展望(2021年-2022年)
  11. 谷歌Adblock Plus 广告拦截插件-屏蔽百度热搜和推荐(附网盘下载地址)
  12. Java 开发实例(第3篇),绘制迷宫1 生成迷宫地图
  13. 试题 算法提高 字符串跳步
  14. Vue.js---关闭语法检查
  15. 小白操作:zuul网关升级为getway网关,以及jwt的使用
  16. 苏索轰世界波 米兰2:0热那亚重返意甲前四
  17. JAVA 用enum 来枚举java项目中的错误信息
  18. VIM如何将全部内容复制并粘贴到外部
  19. mysql的mtr是指什么_关于innodb mtr模块
  20. CRM系统的灵活运用

热门文章

  1. EasyExcel实现对excel文件读写
  2. 2021-10-29 记录一次ubuntu重启后,无法进入图形化界面的解决方法
  3. 详解企业财务数字化转型路径|推荐收藏
  4. Source Release和Binary Release的区别
  5. K8S在centos7虚拟机上部署集群
  6. tmux终端复用软件
  7. autocad2008许可证错误无法激活的解决办法
  8. 阿里云oss对象存储图片预处理
  9. 使用H5编写的语音视频通话界面(主要用于移动端)
  10. 正念诱导的内源性θ刺激引起自我超越与抑制成瘾行为