ElasticSearch入门(一)主要概念汇总

背景

最近项目中须要作一些大数据的全文检索功能,之前项目中都是基于 Lucene 进行的开发。而随着互联网技术架构的发展,近几年搜索引擎技术发展迅速,其中ElasticSearch进行技术的预演。 的热度一直都在搜索引擎排在前面,它的实时搜索、稳定、分布式、REST API 封装都是它的特色。结合网上其余资料对比,这个项目也打算使用 ElasticSearch 进行技术的预演。node

预演步骤

既然技术选型已经肯定,接下来就是围绕这个目标进行一步一步的任务细化。并且由于时间线不能拉太长,因此目前是先可以和业务集成,对应一些底层的集群、分片等原理性的内容,放到最后再去深刻了解。web

  1. 了解 ElasticSearch 基本概念,基本原理
  2. 了解 ElasticSearch 基本使用方法,如何安装、建立索引、检索,分布式等。
  3. 和实际业务结合,开发集成 ElasticSearch 。
  4. 了解 ElasticSearch 更多细节的东西,优化,扩展等。

本文主要介绍一些 ElasticSearch 基本概念,以及和 Apache solr 的一些对比。数据库

基本概念

什么是elasticsearch?

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并做为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,可以达到实时搜索,稳定,可靠,快速,安装使用方便。-----百度百科json

为何会用到elasticsearch?

涉及到like的大数据量模糊查询,若是是直接对数据库进行查询的话,因为like模糊查询没法对数据列应用索引,因此须要一条条字符串进行比对查询,效率很是低下。因此在Java中,解决大数据量的模糊查询,就会用到创建索引库,全文检索的查询技术。服务器

Elasticsearch中的几个核心概念

全文检索

全文搜索引擎是目前普遍应用的主流搜索引擎。它的工做原理是计算机索引程序经过扫描文章中的每个词,对每个词创建一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先创建的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程相似于经过字典中的检索字表查字的过程。-----百度百科网络

全文索引

采用分词器,对文本每一个词进行切分,创建词条,方便进行查找数据结构

索引(index)

一个索引就是一个拥有几分类似特征的文档的集合。好比说,你能够有一个客户数据的索引,另外一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须所有是小写字母的),而且当咱们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,若是你想,能够定义任意多的索引。 这里索引至关于关系型数据库中的库。架构

倒排索引

也常被称为反向索引,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最经常使用的数据结构。经过倒排索引,能够根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。源于实际应用中须要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具备该属性值的各记录的地址。因为不是由记录来肯定属性值,而是由属性值来肯定记录的位置,于是称为倒排索引(inverted index)。带有倒排索引的文件咱们称为倒排索引文件,简称倒排文件(inverted file)。这里的倒排索引至关于关系型数据库中的索引elasticsearch

类型(type)

在一个索引中,你能够定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义彻底由你来定。一般,会为具备一组共同字段的文档定义一个类型。好比说,咱们假设你运营一个博客平台而且将你全部的数据存储到一个索引中。在这个索引中,你能够为用户数据定义一个类型,为博客数据定义另外一个类型,固然,也能够为评论数据定义另外一个类型。这里的类型至关于关系型数据库中的表分布式

文档(document)

一个文档是一个可被索引的基础信息单元。好比,你能够拥有某一个客户的文档,某一个产品的一个文档,固然,也能够拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个处处存在的互联网数据交互格式。在一个index/type里面,只要你想,你能够存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。这里的文档至关于关系型数据库中表的记录

文档元数据(Field)

文档元数据_index:文档在哪存放_type:文档表示的对象类别_id:文档惟一标识ID 是一个字符串,当它和 _index 以及 _type 组合就能够惟一肯定 Elasticsearch中的一个文档。 当你建立一个新的文档,要么提供本身的 _id ,要么让 Elasticsearch 帮你生成。这里的文档元数据至关于关系型数据库中的表中的字段

分词

分词就是把一段连续的文本按照语义拆分红多个单词,而后Es按照单词来给记录作索引,分词后的集合就是做为倒排索引的key值。 ES 内部内置了多种分词器,若是要对中文分词则须要ik分词器。例如:苹果手机,经过分词器分析可能被拆分为苹果、手机。

分片和复制(shards & replicas)

一个索引能够存储超出单个结点硬件限制的大量数据。好比,一个具备10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分红多份的能力,这些份就叫作分片。当你建立一个索引的时候,你能够指定你想要的分片的数量。每一个分片自己也是一个功能完善而且独立的“索引”,这个“索引”能够被放置到集群中的任何节点上。 分片之因此重要,主要有两方面的缘由:

  • 容许你水平分割/扩展你的内容容量
  • 容许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操做,进而提升性能/吞吐量 至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是彻底由Elasticsearch管理的,对于做为用户的你来讲,这些都是透明的。在一个网络/云的环境里,失败随时均可能发生,在某个分片/节点不知怎么的就处于离线状态,或者因为任何缘由消失了,这种状况下,有一个故障转移机制是很是有用而且是强烈推荐的。为此目的,Elasticsearch容许你建立分片的一份或多份拷贝,这些拷贝叫作复制分片,或者直接叫复制。 复制之因此重要,有两个主要缘由:
  • 在分片/节点失败的状况下,提供了高可用性。由于这个缘由,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是很是重要的。
  • 扩展你的搜索量/吞吐量,由于搜索能够在全部的复制上并行运行

集群(cluster)

一个集群就是由一个或多个节点组织在一块儿,它们共同持有你整个的数据,并一块儿提供索引和搜索功能。一个集群由一个惟一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,由于一个节点只能经过指定某个集群的名字,来加入这个集群。在产品环境中显式地设定这个名字是一个好习惯,可是使用默认值来进行测试/开发也是不错的。

节点(node)

一个节点是你集群中的一个服务器,做为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群相似,一个节点也是由一个名字来标识的,默认状况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工做来讲挺重要的,由于在这个管理过程当中,你会去肯定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。 一个节点能够经过配置集群名称的方式来加入一个指定的集群。默认状况下,每一个节点都会被安排加入到一个叫作 “elasticsearch” 的集群中,这意味着,若是你在你的网络中启动了若干个节点,并假定它们可以相互发现彼此,它们将会自动地造成并加入到一个叫作 “elasticsearch” 的集群中。 在一个集群里,只要你想,能够拥有任意多个节点。并且,若是当前你的网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认建立并加入一个叫作 “elasticsearch” 的集群。

elasticsearch与 Apache solr的比较

Apache solr 优势

  1. Solr有一个更大、更成熟的用户、开发和贡献者社区。
  2. 支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
  3. Solr比较成熟、稳定。
  4. 不考虑建索引的同时进行搜索,速度更快。

solr缺点

创建索引时,搜索效率降低,实时索引搜索效率不高。

Elasticsearch 优势

  1. Elasticsearch 是分布式的。不须要其余组件,分发是实时的,被叫作”Push replication”。
  2. Elasticsearch 彻底支持 Apache Lucene 的接近实时的搜索。
  3. 处理多租户(multitenancy)不须要特殊配置,而Solr则须要更多的高级设置。
  4. Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
  5. 各节点组成对等的网络结构,某些节点出现故障时会自动分配其余节点代替其进行工做。

缺点

  1. 只有一名开发者(当前 Elasticsearch GitHub 组织已经不仅如此,已经有了至关活跃的维护者)
  2. 还不够自动(不适合当前新的Index Warmup API)

对比结果

  1. 当单纯的对已有数据进行搜索时,Solr 更快。
  2. 当实时创建索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch 具备明显的优点。
  3. 随着数据量的增长,Solr的搜索效率会变得更低,而 Elasticsearch 却没有明显的变化。
  4. Solr 的架构不适合实时搜索的应用。
  5. Solr 支持更多格式的数据,而 Elasticsearch 仅支持 json 文件格式
  6. Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch
  7. Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

关于ELKB

先说下ELK,ELK是一个流行的日志系统解决方案,注意,ELK不是一个软件名,而是一个解决方案的缩写,即Elasticsearch+Logstash+Kibana(ELK Stack)这三个软件的集合。

  1. Elasticsearch:分布式搜索和分析引擎,具备高可伸缩、高可靠和易管理等特色。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操做。一般被用做某些应用的基础搜索引擎,使其具备复杂的搜索功能。
  2. Logstash:数据收集额外处理和数据引擎。它支持动态的从各类数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操做,而后存储到用户指定的位置。
  3. Kibana:数据分析和可视化平台。一般与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展现。

总结

这篇文章主要是对一些基本概念进行总结,要引入一门新的技术栈,就必须先对这门技术的基本概念有必定了解,而后和市场经常使用技术进行对比,了解优点和劣势,在有必定的了解以后,就能够进入下一阶段了,下一阶段将介绍如何安装 Elasticsearch 如何使用它的Api进行查询。 若是以为有用,能够关注公众号:科比可比克。 原文连接:ES 入门

相关文章
相关标签/搜索