一、ElasticSearch学习是什么
百度百科:
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二最流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的问题。
Wikipedia:
https://en.wikipedia.org/wiki/Elasticsearch
Elasticsearchis asearch enginebased
onLucene. It provides a distributed,multitenant-capable full-text search engine with
anHTTPweb interface and
schema-freeJSONdocuments.
Elasticsearch is developed inJavaand is
released asopen sourceunder the
terms of theApache
License. Official clients are available inJava,.NET(C#),Python,Groovyand many
other languages.[2]Elasticsearch
is the most popular enterprise search engine followed byApache Solr, also based on Lucene.[3]
It is developed alongside a data
collection and log parsing engine calledLogstash, and an
analytics and visualisation platform calledKibana. The threeproducts are designed to be used as an integrated solution, referred to as the"ELK stack".
1.相关概念
1.1多租户技术Multitenancy
1.1.1概述:
360百科:
http://baike.so.com/doc/6381782-6595432.html
多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。
由于云计算议题的发烧,在共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离,让多租户技术成为云计算技术下的显学。
Wikipedia:
https://en.wikipedia.org/wiki/Multitenancy
The term "software multitenancy"refers to asoftware
architecturein which a singleinstanceofsoftwareruns on a
server and serves multiple tenants. A tenant is a group of users who share a
common access with specific privileges to the software instance. With a
multitenant architecture, asoftware applicationis
designed to provide every tenant a dedicated share of the instance - including
its data, configuration, user management, tenant individual functionality
properties. Multitenancy contrasts with multi-instance
architectures, where separate software instances operate on behalf of different
tenants.[1]
Some commentators regard multitenancy as
an important feature ofcloud
1.1.2技术:
技术上,多租户技术可以通过许多不同的方式来切割用户的应用程序环境或数据。
数据面(dataapproach):供应商可以利用切割数据库(database),切割存储区(storage),切割结构描述(schema)或是表格(table)来隔离租户的数据,必要时会需要进行对称或非对称加密以保护敏感数据,但不同的隔离作法有不同的实现复杂度与风险。
程序面(applicationapproach):供应商可以利用应用程序挂载(hosting)环境,于进程(process)上切割不同租户的应用程序运行环境,在无法跨越进程通信的情况下,保护各租户的应用程序运行环境,但供应商的运算环境要够强。
系统面(systemapproach):供应商可以利用虚拟化技术,将实体运算单元切割成不同的虚拟机,各租户可以使用其中一至数台的虚拟机来作为应用程序与数据的保存环境,但对供应商的运算能力要更要求。
1.1.3实现方式:
多租户技术的实现重点,在于不同租户间应用程序环境的隔离(applicationcontextisolation)以及数据的隔离(dataisolation),以维持不同租户间应用程序不会相互干扰,同时数据的保密性也够强。
应用程序部份:通过进程或是支持多应用程序同时运行的装载环境(例如WebServer,像是Apache或IIS等)来做进程间的隔离,或是在同一个伺服程序(server)进程内以运行绪的方式隔离。
数据部份:通过不同的机制将不同租户的数据隔离,Force.com是采用中介数据(metadata)的技术来切割,微软MSDN的技术文件则是展示了使用结构描述的方式隔离。
2.ES技术技术概念
2.1基本概念
ElasticSearch(简称ES)是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎。
不过,ElasticSearch却也不仅只是一个全文本搜索引擎,它还是一个分布式实时文档存储,其中每个field均是被索引的数据且可被搜索;也是一个带实时分析功能的分布式搜索引擎,并且能够扩展至数以百计的服务器存储及处理PB级的数据。
如前所述,ElasticSearch在底层利用Lucene完成其索引功能,因此其许多基本概念源于Lucene。
2.1.1索引(Index)
ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。
索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。
2.1.2类型(Type)
类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。
例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。
2.1.3文档(Document)
文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。
文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。
2.1.4映射(Mapping)
ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。
另外,ES还提供了额外功能,例如将域中的内容按需排序。事实上,ES也能自动根据其值确定域的类型。
2.2集群概念
2.2.1集群(Cluster)
ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。
多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。
集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属一个集群。
如果不考虑冗余能力等特性,仅有一个节点的ES集群一样可以实现所有的存储及搜索功能。
2.2.2节点(Node)
运行了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。
类似于集群,节点靠其名称进行标识,默认为启动时自动生成的随机Marvel字符名称。
用户可以按需要自定义任何希望使用的名称,但出于管理的目的,此名称应该尽可能有较好的识别性。
节点通过为其配置的ES集群名称确定其所要加入的集群。
2.2.3分片(Shard)和副本(Replica)
ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。
每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。
Shard有两种类型:primary和replica,即主shard及副本shard。
Primary shard用于文档存储,每个新的索引会自动创建5个Primary
shard,当然此数量可在索引创建之前通过配置自行定义,不过,一旦创建完成,其Primary shard的数量将不可更改。
Replica shard是Primary Shard的副本,用于冗余数据及提高搜索性能。
特点:
1.每个Primary shard默认配置了一个Replica
shard,但也可以配置多个,且其数量可动态更改。ES会根据需要自动增加或减少这些Replica shard的数量。
2. ES集群可由多个节点组成,各Shard分布式地存储于这些节点上。
3. ES可自动在节点间按需要移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。
二、原理
http://www.cnblogs.com/valor-xh/p/6095894.html
1.搜索引擎组件介绍
著名的开源程序Lucene是索引组件,它提供了搜索程序的核心索引和搜索模块,例如图中的“Index”及下面的部分;而ElasticSearch则更像一款搜索组件,它利用Lucene进行文档索引,并向用户提供搜索组件,例如“Index”上面的部分。二者结合起来组成了一个完整的搜索引擎。
2.ES的数据查询
查询执行过程通常要分成两个阶段,分散阶段及合并阶段。
分散阶段是向所查询的索引中的所有shard发起执行查询的过程,合并阶段是将各shard返回的结果合并、排序并响应给客户端的过程。
向ElasticSearch发起查询操作有两种方式:一是通过RESTful request API传递查询参数,也称“query-string”;另一个是通过发送REST request body,也称作JSON格式。
三、特性
1.实时文档存储,文档对象的每个field都建立了索引,都能被检索
2.构建适应于不同规模的应用的体系结构,在此之上实现分布式搜索。
3.为其他平台系统提供了具有rest风格的原生java api。也有hadoop的依赖包
4.简单可用性强,不需要对搜索原理有深入的理解。平台有免费模式。
具有可伸缩性,灵活的构建和易用性。提供一个易用性的平台,进行规模扩展时无需考虑核心功能与用户自定义选项间妥协。
四、和solr区别
1.Solr利用Zookeeper进行分布式管理;而Elasticsearch自身带有分布式协调管理功能;
2.Solr支持更多格式的数据json,XML等;而Elasticsearch仅支持json文件格式;
3.Solr官方提供的功能更多;而Elasticsearch本身更注重于核心功能,高级功能多由第三方插件提供;
4.Solr在传统的搜索应用中表现好于Elasticsearch,但在处理实时搜索应用时效率明显低于Elasticsearch。
5.Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。
Ps:走过的路,每一步都算数,沉淀我所学习,累积我所见闻,分享我所体验;
文\楼外楼,未经许可,禁止转载。(微信公众号:PM天秤座的楼外楼)