Elastic Stack-Elasticsearch介绍
一、前言
前篇写了好像没有多少人去看,但是还是要继续,我猜想可能是很多人接触的这块比较少吧,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介绍的更多相关文章
- ES 集中式日志分析平台 Elastic Stack(介绍)
一.ELK 介绍 ELK 构建在开源基础之上,让您能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地对数据进行搜索.分析和可视化. 最近查看 ELK 官方网站,发现新一代的日志采集器 File ...
- 集中式日志分析平台 Elastic Stack(介绍)
一.ELK 介绍 二.ELK的几种常见架构 >>ELK 介绍<< ELK 构建在开源基础之上,让您能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地对数据进行搜索.分析 ...
- Elastic Stack之ElasticSearch分布式集群二进制方式部署
Elastic Stack之ElasticSearch分布式集群二进制方式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道ELK其实就是Elasticsearc ...
- Elastic Stack之ElasticSearch分布式集群yum方式搭建
Elastic Stack之ElasticSearch分布式集群yum方式搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.搜索引擎及Lucene基本概念 1>.什么 ...
- Elastic Stack核心产品介绍-Elasticsearch、Logstash和Kibana
Elastic Stack 是一系列开源产品的合集,包括 Elasticsearch.Kibana.Logstash 以及 Beats 等等,能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地 ...
- 浅尝 Elastic Stack (一) Elasticsearch、Kibana、Beats 安装
Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash,也称为 ELK Stack.能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据进 ...
- Elastic Stack(ElasticSearch 、 Kibana 和 Logstash) 实现日志的自动采集、搜索和分析
Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据 ...
- ELK stack elasticsearch/logstash/kibana 关系和介绍
ELK stack elasticsearch 后续简称ES logstack 简称LS kibana 简称K 日志分析利器 elasticsearch 是索引集群系统 logstash 是日志归集集 ...
- Elastic Stack-Elasticsearch使用介绍(三)
一.前言 上一篇说了这篇要讲解Search机制,但是在这个之前我们要明白下文件是怎么存储的,我们先来讲文件的存储然后再来探究机制: 二.文档存储 之前说过文档是存储在分片上的,这里要思考一个问 ...
- 【SpringBoot】搜索框架ElasticSearch介绍和整合SpringBoot
========================12章 搜索框架ElasticSearch介绍和整合SpringBoot ============================= 加入小D课堂技术交 ...
随机推荐
- java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和System.err.println的区别 Java重定向System.out和System.err
本文关键词: java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.pri ...
- Signalr指定Websocket方式跨域数据传输
跨域通俗理解就是两个域名后面的web服务地址,即都是独立的网站.现实业务的情况会有很多需要跨域推送数据的情况, 比如类似饿了么商户后台会收到客户端确认订单后,后台服务会推送一条订单消息给商户前台. S ...
- 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(2)- 界面构建(wxFormBuilder3.8.0)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之界面构建. 一个软件的UI界面是非常重要的,这是软件与用户交互的接口,软件功能即使再强大,但如果没 ...
- CAN总线学习记录之三:总线中主动错误和被动错误的通俗解释
首先建议把广泛使用的"主动错误"和"被动错误"概念换成"主动报错"和"被动报错". 1. 主动报错站点 只要检查到错误, ...
- Understanding ROS Services and Parameters
service是nodes之间通信的一种方式,允许nodes send a request and recieve a response. rosservice rosparam roservice ...
- C#工具:Bootstrap WPF Style,Bootstrap风格的WPF样式
简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...
- Oracle day04 DML_事务_序列_视图_数据类型_DDL
DMLinsert关键字作用:往表中插入一条(多条)数据 语法1:元祖值式的插入语法1: insert into tablename(column1,column2,...,columnN) valu ...
- 前端性能优化(css动画篇)
正巧看到在送书,于是乎找了找自己博客上记录过的一些东西来及其无耻的蹭书了~~~ 小广告:更多内容可以看我的博客 最近拜读了一下html5rocks上几位大神写的一篇关于CSS3动画性能优化的文章,学到 ...
- arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- Xamarin 学习笔记 - 配置环境(Windows & iOS)
本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1223980/Xamarin-Notes-Set-up-the-environment ...