一、前言

    前篇写了好像没有多少人去看,但是还是要继续,我猜想可能是很多人接触的这块比较少吧,Elasticsearch这块有很多要说的,开始吧。

二、数据库、Elasticsearch选择

    传统的数据由于采用的是B+树的索引,当数据量很大很大的时候,例如单表1Y以上的时候当我们在想做like操作的时候,这个是由于like操作会引起全表检索,这个时候非常影响我们查询的效率,当出现这种状况的时候我们就需要考虑下Elasticsearch,没错这就是一个为搜索而生的,Elasticsearch采用的是倒排索引,这里先不要明白什么是倒排索引,下一篇我会比较详细介绍的,这里你有又会问Elasticsearch这么牛逼我们为什么不把它当做持久化DB?这个问题没个人有每个人的看法,只要理由合适就可以,我认为是可以得,但是这里我们要考虑到事务这个特性,传统的数据库是支持ACID,但是在Elasticsearch是不支持的,如果说你的应用不考虑到这点,我支持你使用Elasticsearch作为DB,如果还是要考虑到这些事务的问题,那么我建议你还是将Elasticsearch考虑作为一个搜索和查询展示的工具,这个是我的一些看法,大家有不同意见可以探讨;

三、Elasticsearch介绍

     Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch是一个基于Apache Lucene的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。Wikipedia、Stack Overflow、GitHub 等都基于 Elasticsearch 来构建他们的搜索引擎。

四、Elasticsearch相关概念介绍

    集群(Cluster)

    一个集群包含一个或多个节点,用来保存全部数据,并且这些节点联合提供索引和搜索能力。集群使用唯一名称进行不同集群间的区分,默认名称是”elasticsearch”。

节点(Node)

   一个Elasticsearch运行实例,是集群的构成单元。集群中的节点,也有唯一标识的,默认在节点启动的时候会随机指定一个UUID。如果不使用默认名称,可以为其指定一个名称,当想要加入某个集群的时候也必须要指定集群的名称;接下来我们还要介绍下节点的类型:

候选主节点(Master-eligible node)

一个节点启动后,就会使用Zen Discovery机制去寻找集群中的其他节点,并与之建立连接。集群中会从候选主节点中选举出一个主节点,主节点负责创建索引、删除索引、分配分片、追踪集群中的节点状态等工作。正常情况下,一个集群中只有一个选举出来的主节点,当主节点由于网络或者负载过大停止响应,此时就需要重新选举主节点,这时可能会出现集群中有多个主节点的现象,即节点对集群状态的认知不一致,称之为脑裂现象。这也就是为什么候选主节点要为单数的情况的原因;这里我建议候选主节点不要存放数据,配置如下:

node.master = true
node.data = false

数据节点(Data node)

数据节点主要存放索引相关数据的分片,负责数据的存储和相关具体操作,比如CRUD、搜索、聚合等。

node.master = false
node.data = true

主要介绍这来两种,剩下的大家参考官方文档

索引(index)

   索引就是相当于Mysql里的Database,存储文档结构相同的类型的集合;

文档(documnet)

   文档是索引的基础信息单元,相当于Mysql中的行,文档与JSON的形式表现,

Document MetaData(元数据)

1._index:文档所在的索引名,多索引查询时,有时候只需要在特地索引名上进行查询,_index字段提供了便利。_index是一个虚拟字段,不会真的加到Lucene索引中。

2._type:文档所在的类型名,可以根据_type进行查询、聚合、脚本和排序。

3._id: 文档唯一 id;

4._uid: 组合id,由_type 和_id 组成;

5._source:文档的原始Json数据,可以从这里获取每个字段的内容。默认_source字段是开启的,也可以关闭:

6._all: 字段拼接在一起,将所有的字段用空格分开,_all字段会被解析和索引,但是不存储。当你只想返回包含某个关键字的文档但是不明确地搜某个字段的时候就需要使用_all字段。 默认禁用;

7._parent:指定同一索引中文档的父子关系;

8._routing:_routing值是文档的_id或者_parent,通过_routing参数可以设置自定义路由;

类型(type)

   索引中可以定义一种或多种类型。类型是索引的一个逻辑上的分类;

字段(field)

   字段是Elasticsearch里面最小的单元,相当于Mysql的列,类似于JSON中的一个键,字段类型:

字符串: text keyword(不分词);

数值类型: long integer short(-32,768至32768) byte(-128至127) double float half_float(16位半精度) scaled_float缩放类型的的浮点数(比如价格只需要精确到分,price为88.88的字段缩放因子为100,存起来就是8888);

布尔型: boolean;

日期: date;

二进制: binary;

范围类型: integer_range float_range long_range double_range date_range;

分片(shards)

   Elasticsearch将索引分成若干份,默认是5个分片,每个部分是一个分片,每个分片存在不同节点上,一个节点不能存在相同的分片,每个文档通过文档id进行Hash决定放到那个节点上,每个分片都是一个独立的Lucene实例;

 副本(replicas)

索引的一份或者多份拷贝,默认是1份,主要作用是容灾作用,防止分片丢失后,副本分片会成为主分片,保证数据不会丢失,另外提升查询性能;

五、下节预告

    下次一篇介绍索引的创建、查询原理、分词器等,欢迎点赞,欢迎加群438836709,欢迎关注公众号:

Elastic Stack-Elasticsearch介绍的更多相关文章

  1. ES 集中式日志分析平台 Elastic Stack(介绍)

    一.ELK 介绍 ELK 构建在开源基础之上,让您能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地对数据进行搜索.分析和可视化. 最近查看 ELK 官方网站,发现新一代的日志采集器 File ...

  2. 集中式日志分析平台 Elastic Stack(介绍)

    一.ELK 介绍 二.ELK的几种常见架构 >>ELK 介绍<< ELK 构建在开源基础之上,让您能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地对数据进行搜索.分析 ...

  3. Elastic Stack之ElasticSearch分布式集群二进制方式部署

    Elastic Stack之ElasticSearch分布式集群二进制方式部署 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道ELK其实就是Elasticsearc ...

  4. Elastic Stack之ElasticSearch分布式集群yum方式搭建

    Elastic Stack之ElasticSearch分布式集群yum方式搭建 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.搜索引擎及Lucene基本概念 1>.什么 ...

  5. Elastic Stack核心产品介绍-Elasticsearch、Logstash和Kibana

    Elastic Stack 是一系列开源产品的合集,包括 Elasticsearch.Kibana.Logstash 以及 Beats 等等,能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地 ...

  6. 浅尝 Elastic Stack (一) Elasticsearch、Kibana、Beats 安装

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash,也称为 ELK Stack.能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据进 ...

  7. Elastic Stack(ElasticSearch 、 Kibana 和 Logstash) 实现日志的自动采集、搜索和分析

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据 ...

  8. ELK stack elasticsearch/logstash/kibana 关系和介绍

    ELK stack elasticsearch 后续简称ES logstack 简称LS kibana 简称K 日志分析利器 elasticsearch 是索引集群系统 logstash 是日志归集集 ...

  9. Elastic Stack-Elasticsearch使用介绍(三)

    一.前言     上一篇说了这篇要讲解Search机制,但是在这个之前我们要明白下文件是怎么存储的,我们先来讲文件的存储然后再来探究机制: 二.文档存储 之前说过文档是存储在分片上的,这里要思考一个问 ...

  10. 【SpringBoot】搜索框架ElasticSearch介绍和整合SpringBoot

    ========================12章 搜索框架ElasticSearch介绍和整合SpringBoot ============================= 加入小D课堂技术交 ...

随机推荐

  1. ubuntu 15.10 设置静态ip 分配固定ip 设置dns 设置网关 命令行配置ip 固定ip不生效怎么办

    要用到的文件: 配置接口信息 /etc/network/interfaces 配置内容: auto eth0 iface eth0 inet static address 192.168.216.18 ...

  2. 支持异步写入的日志类,支持Framework2.0

    因为工作需要需要在XP上运行一个C#编写的Winform插件,我就用Framework2.0,因为存在接口交互所以想保留交易过程的入参出参. 考虑到插件本身实施的因素,就没有使用Log4.NLog等成 ...

  3. 根据数值获得概率密度pdf和累积密度分布cdf(MATLAB语言)

    y=randn(1,3000); % 生成1-by-3000的标准正态分布随机数 ymin=min(y); ymax=max(y); x=linspace(ymin,ymax,20); %将最大最小区 ...

  4. Perl IO:read()函数

    read()函数 read()函数用于从文件句柄中读取指定字节数的数据并写入到一个标量中.如果文件句柄是以Unicode方式打开的,则表示读取指定字符数而非字节数. 有两种read方式: read F ...

  5. 第29章 保护API - Identity Server 4 中文文档(v1.0.0)

    IdentityServer 默认以JWT(JSON Web令牌)格式发出访问令牌. 今天的每个相关平台都支持验证JWT令牌,这里可以找到一个很好的JWT库列表.热门库例如: ASP.NET Core ...

  6. Maven(十一)导入手动创建的Maven 工程

    传统的导入方式并不能导入手动创建的Maven工程 因为eclipse项目必须有如图所示文件,才被认为是Eclipse工程 使用Maven方式导入 导入选项中并没有把项目复制到工作空间的选项,这是与传统 ...

  7. 利用MingW检验程序运行内存

    今天zhx老师在讲课的时候提到了一种检验程序内存的方法 一般计算内存的方法就是手算,手动计算代码中每个变量所占的内存然后加起来 具体可以参考这篇文章 zhx老师讲的方法可以实现全自动化计算内存 具体怎 ...

  8. max-width和width的区别

    width为宽度 max-width为最大宽度 如果设置了width,那宽度就定死了,不能动态的改变,显得僵硬 而设置了max-width,实际宽度可以在0~max-width之间,当元素内部宽度不足 ...

  9. MockJS和Easy Mock使用

    之前做mock数据一直用的json-server,今天同事给我推荐了很好用的工具:Easy Mock,我看完之后是下图的状态 很得劲啊,感觉人生已经达到了高潮 既能伪造接口,又能根据既定的规则生成对应 ...

  10. Dynamics 365-如何指定邮件收件人的地址

    如果CRM Entity勾选了Sending Email,那么这个Entity的Records是可以直接作为Email的收件人使用的,而邮件地址是Entity的Primary Email字段. 在我们 ...