ElasticSearch笔记一

实习的时候接触到的这个,留点笔记。查询样例也带不走,没法复制粘贴,也发不出去。

基本概念

ElasticSearch其实就是一种Json文档数据库。
索引存放和读取的基本单元是文档
文档相当于一个json对象
文档有一个或多个域,每个域field由一个域名或多个值组成(有多个值的称为多值域)

ElasticeSearch的数据结构

转载:
https://blog.csdn.net/codingapple/article/details/12920263
Elasticsearch的底层搜索是以lucene来实现的。其主要是提供了一个分布式的框架来扩展了lucene,从而实现大数据量的,分布式搜索功能。其实现思想很简单,将大数据量分而治之,哈希分成多份,然后对每一份进行“lucene处理”——用lucene索引、检索,最后将每份结果合并返回。
这里主要介绍下支持这种分布式功能得以实现的数据结构。Elasticsearch中的routingtable信息。

我对ES的集群结构的理解(原)
集群就是将多台机器(node)连接到一起。

一个索引相当于一个数据库,
一个索引又会被分成多个数据分片(shard),每个数据分片会有一个副本
将这些数据分片均匀地分布到集群中的Node上,数据分片的主本和副本不能位于同一Node。

在这里插入图片描述
如上图所示,Elasticsearch中的路由信息是分这么四层结构的:
1)RoutingTable:是整个集群的总体路由信息。每个Elasticsearch都可以建立多个索引,这里存储的是各个索引的信息。
2)IndexRoutingTable:是针对一个索引的路由信息。每个索引可以被拆分成不同的shard,这里存储的是各个shard的信息。
3)IndexShardRoutingTable:这个概念不好解释。Elasticsearch的shard是分为主副本的。这里的副本shard可以简单理解为对一个主本shard的备份。他们的数据是相同的,id号是相同的,所不同的是主副本标志位以及所处node等信息。IndexShardRoutingTable中存储针对同一个id号的,所有主副本shard的信息。(可以理解为shard的一个集合。)
4)ShardRouting:分片信息,是路由表信息的最小单元,主要保存了shardId,所属index,所属node节点,是否主本等信息。
还可以从下图了解下:
在这里插入图片描述
是我在本机搭建的Elasticsearch集群,所生成的数据。本集群是3个节点,因此在nodes文件夹下,会有0、1、2文件夹对应不同的node。我建立了两个索引,分别叫做test和twitter。针对twitter索引,分成5个shard,每个shard只有一个副本。因此从图中可以看到,twitter文件夹下的子文件夹应该是:0 0 1 1 2 2 3 3 4 4.他们均衡的分布在三个node上。并且因为其采用了这种文件夹结构,所以针对同一个shard的主副本是不能在同一个node上的。
结合上面的图片,就会有比较清晰的认识。
Elasticsearch同时还提供了另外一种纬度的路由视图是:RoutingNodes——RoutingNode——MutableShardRouting。

节点Node
单独es服务器实例称为一个节点
(所以在一天机器上我们可以查询到下面的索引信息,还有索引下面的数据分片)
集群Cluster
集群能存储超出单机容量的信息。就是将多个node(服务器)连接到一起,分布式存储。
索引Replica
通过索引分片机制可以向es集群中导入超过单机容量的数据,客户端操作任意一个节点接口实现对集群数据的读写。
时间之门gateway
在运行的过程中,es会收到集群的状态,索引的参数等信息。这些被存储在gateway中。
**

ES中的字段类型及常用属性

转载:
https://www.cnblogs.com/xing901022/p/5471419.html

ES和传统关系型数据库的比较

转载:https://blog.csdn.net/varyall/article/details/79143796
在Elasticsearch中,文档归属于一种 类型(type) ,而这些类型存在于 索引(index)中,类比传统关系型数据库:
Relational DB -> Databases -> Tables -> Rows -> Columns
关系型数据库 数据库 表 行 列
Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch 索引 类型 文档 域(字段)
在这里插入图片描述
2、Elasticsearch
Elasticsearch没有典型意义的事务.
Elasticsearch是一种面向文档的数据库。
Elasticsearch没有提供授权和认证特性

传统数据库为特定列增加一个索引,例如B-Tree索引来加速检索。Elasticsearch和Lucene使用一种叫做倒排索引(inverted index)的数据结构来达到相同目的。
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。

Elasticsearch中的概念与关系型数据库对比。

Relational DB ⇒ Databases ⇒ Tables ⇒ Rows ⇒ Columns
关系型数据库 数据库 表 行 列
Elasticsearch ⇒ Indices ⇒ Types ⇒ Documents ⇒ Fields
Els 索引 类型 文档 域(字段)
2、在Elasticsearch中,所有的字段缺省都建了索引。 也就是说每一个字段都有一个倒排索引,用于快速查询。
3、es支持http协议(json格式)(9200端口)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。传统关系型数据库不支持。
4、es支持分片和复制,从而方便水平分割和扩展,复制保证了es的高可用与高吞吐。

ES和MySql选哪个?

在数据查询场景下,默认返回所有满足匹配条件的记录;而ES作为新生代NoSQL数据库代表之一,非常适合于非结构化文档类数据存储、更创新支持智能分词匹配模糊查询。比如在电商网站商品搜索栏中,用户输入以空格为分隔符的字符串(如:家电电视等),后台ES数据库搜索引擎会根据用户输入的信息,对数据库中保存的非结构化数据进行分词模糊匹配查询,返回满足匹配条件的前N条记录给用户;另外ES更典型应用在于根据用户浏览记录日志来追踪用户行为,智能推送用户期望浏览的数据信息,此时通常借助ELK三大组件互相配合完成。

关于如何在MySQL和ES之间做到合理技术选型,ES官方网站也给出了指导性建议如下图所示。从英文描述看,基本上和之前的介绍相符合。因此,如果业务数据为结构化数据,同时不需要特别关注排名和智能分词模糊匹配查询等特性,则建议采用关系型数据库如MySQL来作为数据存储介质并使用配套搜索引擎;反之,如果业务数据为非结构化数据,同时更关注排名和需要智能分词模糊匹配的特性,则建议采用非关系型数据库如ES作为数据存储介质并使用配套搜索引擎。

MySql模糊查询容易造成不走索引的现象,而且查询条件一多就会显得很复杂,用ES组合起来显然就方便多了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值