1.ElasticSearch是什么,有什么特点,为什么要用ElasticSearch?mysql用的好好为什么要加一个ElasticSearch呢?
Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。具有实时搜索,稳定,可靠,快速,安装使用方便等特点。 当我们模糊收索海量数据时,并且需要对检索结果进行指定排序,这些mysql根本做不到,但是ElasticSearch可以做到。
2.为什么是ElasticSearch而不是Solr ?
ElasticSearch与Solr的比较:
二者安装都很简单。
1、Elasticsearch 自身带有分布式协调管理功能,Solr 需要利用 Zookeeper 来进行分布式管理。
2、Elasticsearch 仅支持json文件格式,Solr 支持JSON、XML、CSV。
3、Elasticsearch 处理实时搜索应用时效率要高于Solr, 但在传统的搜索应用中表现不如 solr。
3.Elasticsearch 与关系数据库的关系?
Elasticsearch: index(索引) type(类型) document(文档) field(字段)
关系数据库: database(库) table(表) row(行) column(列)
以上关系一一对应。
4.Elasticsearch的核心概念有哪些?
4.1 索引 index
一个索引其实就是文档的集合,再说的露骨一点其内容就是一个json数组。必须全部是小写字母可以有特殊字符和数字。当我们需要对文档进行索引、搜索、更新和删除的时候都需要用到这个名字。
4.2 映射 mapping
设置字段的数据类型、默认值、分词器、是否被索引等等,可以在创建索引时定义,也可以由Elasticsearch自己默认生成。
4.3 字段 Field
相当于是数据表的字段|列。
4.4 字段类型 Type
每一个字段都应该有一个对应的类型,例如:Text、Keyword、Byte等。
4.5 文档 document
可被索引的基础信息单元,类似一条记录。文档以JSON格式来表示.。
4.6 集群 cluster
由多个节点组织在一起,共同持有整个的数据,并一起提供索引和搜索功能。集群可以拥有任意多个节点(最好时基数个)。而且,当前网络中没有运行任何Elasticsearch节点时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。
4.7 节点 node
一个节点是集群中的一个服务器,它存储数据,参与集群的索引和搜索功能,节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,如果在网络中启动了若干个节点,它们能够相互发现彼此,此时又没有指定具体的集群名,那它们会自动地形成并加入到一个叫做“elasticsearch”的集群中。
4.8 分片和副本 shards&replicas
4.8.1 分片
- 一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间,或者单个节点处理搜索请求,响应太慢。
- 为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片
- 当创建一个索引的时候,可以指定你想要的分片的数量,每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。
- 分片很重要,主要有两方面的原因
1. 允许水平分割/扩展你的内容容量
2.允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
- 至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户来说,这些都是透明的。
- 注意:分片一但创建就不能修改。
4.8.2 副本
- Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做副本分片,或者直接叫副本
- 副本之所以重要,有两个主要原因:
1. 在分片/节点失败的情况下,提供了高可用性。
注意:到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的
2. 扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。分片和副本的数量可以在索引创建的时候指定,创建后,可以动态地改变副本的数量。