文档章节

ES(Elasticsearch)

o
 osc_fmg49rzg
发布于 2019/03/20 11:28
字数 1490
阅读 23
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

基本概念

Elasticsearch是一个实时分布式搜索和分析引擎

支持:

  1. 全文搜索
  2. 结构化搜索
  3. 分析

可以这样进行描述:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 分布式的实时分析搜索引擎
  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。
java也有自己的客户端

与ES交互

ES节点

一个Elasticsearch实例是一个节点,一组节点组成了集群。Elasticsearch集群中的节点可以配置为3种不同的角色:

  • 主节点:
    控制Elasticsearch集群,负责集群中的操作,比如创建/删除一个索引,跟踪集群中的节点,分配分片到节点。主节点处理集群的状态并广播到其他节点,并接收其他节点的确认响应。

每个节点都可以通过设定配置文件elasticsearch.yml中的node.master属性为true(默认)成为主节点。

对于大型的生产集群来说,推荐使用一个专门的主节点来控制集群,该节点将不处理任何用户请求。

  • 数据节点:
    持有数据和倒排索引。默认情况下,每个节点都可以通过设定配置文件elasticsearch.yml中的node.data属性为true(默认)成为数据节点。如果我们要使用一个专门的主节点,应将其node.data属性设置为false。
  • 客户端节点:
    如果我们将node.master属性和node.data属性都设置为false,那么该节点就是一个客户端节点,扮演一个负载均衡的角色,将到来的请求路由到集群中的各个节点。

Elasticsearch集群中作为客户端接入的节点叫协调节点。协调节点会将客户端请求路由到集群中合适的分片上。对于读请求来说,协调节点每次会选择不同的分片处理请求,以实现负载均衡。

 

es底层数据储存

1、底层数据结构

Elasticsearch使用了Apache Lucene,底层结构使用的是倒排索引

倒排索引就建立分词与文档之间的映射关系,在倒排索引之中,数据时面向分词的而不是面向文档的。

来自网上的一段解释:

文档是Elasticsearch的数据单位,对文档中的词项进行分词,并创建去重词项的有序列表,将词项与其在文档中出现的位置列表关联,便形成了倒排索引。

我们来看下如下2个文档是如何被倒排索引的:

文档1(Doc 1): Insight Data Engineering Fellows Program
文档2(Doc 2): Insight Data Science Fellows Program

词项 文档

元数据

所在文档

data

Doc 1, Doc 2

engineering

Doc 1

fellows

Doc 1, Doc 2

insight

Doc 1, Doc 2

program

Doc 1, Doc 2

science

Doc 2

如果我们想找包含词项"insight"的文档,我们可以扫描这个(单词有序的)倒排索引,找到"insight"并返回包含改词的文档ID,示例中是Doc 1和Doc 2。

2、数据写操作

数据新建

  • Elasticsearch集群中的每个节点都包含了改节点上分片的元数据信息。协调节点(默认)使用文档ID参与计算,以便为路由提供合适的分片。
  • 记录translog,并将数据读入到缓存中

流程图: 

数据更新/删除

  • (1)删除
    es中的数据是不能真正被删除的。

磁盘上的每个段都有一个相应的.del文件。当删除请求发送后,文档并没有真的被删除,而是在.del文件中被标记为删除。该文档依然能匹配查询,但是会在结果中被过滤掉。
当下次再进行段合并时,这些被删除的数据就不会被写入到新的段中。这样,在以后搜索匹配的过程中,就不会再次被搜索出来。

  • (2) 更新

在新的文档被创建时,Elasticsearch会为该文档指定一个版本号。当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询,但是会在结果中被过滤掉。

3、数据读操作

查询

协调节点将请求路由到所有包含该文档的节点上,每个节点单独进行查询,并将查询后的结果进行相关性排序,全部分片都将匹配文档的ID及其相关性得分返回给协调节点。协调节点创建一个优先队列并对结果进行全局排序。默认情况下,每个分片只能发送排名前十的数据。

提取

当协调节点在生成的全局有序的文档列表中,为全部结果排好序后,它将向包含原始文档的分片发起请求。全部分片填充文档信息并将其返回给协调节点。

概念解释

    • 搜索相关性
      相关性是由搜索结果中Elasticsearch打给每个文档的得分决定的。默认使用的排序算法是tf/idf(词频/逆文档频率)。词频衡量了一个词项在文档中出现的次数 (频率越高 == 相关性越高),逆文档频率衡量了词项在全部索引中出现的频率,是一个索引中文档总数的百分比(频率越高 == 相关性越低)。最后的得分是tf-idf得分与其他因子比如(短语查询中的)词项接近度、(模糊查询中的)词项相似度等的组合。
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
5.1K
8
日志分析平台 - Kibana

Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。 环境要求: ruby >= 1.8.7 (probably?) bundler logstash...

匿名
2013/02/13
11.4W
1
Android3D应用与游戏开发框架--JQGL

JQGL 是一款针对Android设备上3D应用、游戏的开发框架。 核心功能是OpenGL-ES的使用框架,相对于大部分开发者而已,OpenGL是陌生的,没有专门研究无法进行相关的开发。 本框架针对于Android...

Jping
2013/02/21
1.5K
0
GC3DFlipTransitionStyleSegue

GC3DFlipTransitionStyleSegue 使用 OpenGL ES 2.0 实现了类似 iBook 风格的三维翻动书架的效果。封装成了 UIStoryboardSegue 的一个之类。...

匿名
2013/01/05
514
0

没有更多内容

加载失败,请刷新页面

加载更多

深入分析ES存储原理

es写数据 es写数据的过程 1、客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。 2、coordinating node 对 document 进行路由,将请求转发给对应的 node(有...

tankXiao
2分钟前
0
0
【1121】shell(下)

【1121】shell(下) 5.39 函数 5.40 shell 数组 数组赋值 数组的删除 数组分片 数组替换 5.39 函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直...

飞翔的竹蜻蜓
3分钟前
0
0
在JavaScript中定义枚举的首选语法是什么? [关闭]

问题: What is the preferred syntax for defining enums in JavaScript? 在JavaScript中定义枚举的首选语法是什么? Something like: 就像是: my.namespace.ColorEnum = { RED : 0,......

技术盛宴
25分钟前
14
0
linux 手动挂载硬盘没有移到回收站解决方法

linux 手动挂载硬盘没有移到回收站解决方法 修改挂载硬盘的文件夹权限为当前用户即可

小熊宝宝
30分钟前
24
0
spring集成kafka

1、引入依赖jar包 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency> 2、配置kafka信息 spring: kafka: bootstra......

简到珍
33分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部