lucene和ElasticSearch基本概念

lucene基本概念

索引(Index)

对应一个倒排表,一个检索的基本单位。在lucene中就对应一个目录。java

lucene基本概念
段(Segment)

一个索引能够包含多个段,段与段之间是独立的,添加新文档能够生成新的段,不一样的段能够合并。段是索引数据存储的单元。node

文档(Document)

•文档是咱们建索引的基本单位,不一样的文档是保存在不一样的段中的,一个段能够包含多篇文档。算法

•新添加的文档是单独保存在一个新生成的段中,随着段的合并,不一样的文档合并到同一个段中。数据库

域(Field)

•一篇文档包含不一样类型的信息,能够分开索引,好比标题,时间,正文,做者等,均可以保存在不一样的域里。api

•不一样域的索引方式能够不一样。安全

词(Term)

词是索引的最小单位,是通过词法分析和语言处理后的字符串。服务器

词相同,但域不一样被认为是两个不一样的词,也就是说词是词根和域名的一个组合。数据结构

词向量(Term Vector)app

又称文档向量(document vector),由词文本和词频率组成。分布式

语义树

语义树是构成搜索处理的一个中间结果,搜索时,会生成语义树,而后再进行搜索。

权重(Term Weight)

计算分值时使用的主要指标,指词(Term)在文档中的分值,脱离文档单独说某个词的权重是没有意义的。

Term Frequency (tf):即此Term 在此文档中出现了多少次。tf 越大说明越重要。

Document Frequency (df):即有多少文档包含次Term。df 越大说明越不重要  。

 Posting

通常状况下,将一个词条所索引的文档(通常用文档编号表示)称之为 Posting,那么一个词条索引的多个文档就称之为 Posting-list。这个词咱们在看Java api的时候会常常看到

Payload

 即词条 (Term) 的元数据或称载荷, Lucene 支持用户在索引的过程当中将词条的元数据添加的索引库中,同时也提供了在检索结果时读取 Payload 信息的功能。Payload 的诞生为用户提供了一种可灵活配置的高级索引技术,为支持更加丰富的搜索体验创造了条件。

倒排表(Inverted Indexing)

倒排表是Lucene索引采用的一套数据结构,这种结构以词为中心,可以快速找到包含该词根的文档。由于跟正常的便利文档检索采用的方法相反,所以叫倒排表。倒排表是一种数据结构,lucene的数据文件一块儿构成了一张大的倒排表,而不是具体的某文件存储的倒排结构。

文档编号(Document Number)

Lucene内部经过文档编号索引文档。这个编号在一个段内部惟一,一个段的第一个文档的编号为0,依次递增。不过这个编号仅用于lucene内部使用,并且这个编号在段合并的时候会发生改变。若是须要在段外部使用,必须对这个编号进行惟一性从新编排,确保一个文档在更大的范围也是惟一的。从新编排的一个实现方法是,基数+段内序号的方法。好比有两个段,每一个段里面都有5个文档,则第一个段的文档编号=0+段内编号,第二个段的文档编号=5+段内编号。

 

 

ES基本概念

索引(Index)
ElasticSearch把数据存放到一个或者多个索引(indices)中。若是用关系型数据库模型对比,索引(index)的地位与数据库实例(database)至关。索引存放和读取的基本单元是文档(Document)。咱们也一再强调,ElasticSearch内部用Apache Lucene实现索引中数据的读写。读者应该清楚的是:在ElasticSearch中被视为单独的一个索引(index),在Lucene中可能不止一个。这是由于在分布式体系中,ElasticSearch会用到分片(shards)和备份(replicas)机制将一个索引(index)存储多份。

文档(Document)

在ElasticSearch的世界中,文档(Document)是主要的存在实体(在Lucene中也是如此)。全部的ElasticSearch应用需求到最后均可以统一建模成一个检索模型:检索相关文档。文档(Document)由一个或者多个域(Field)组成,每一个域(Field)由一个域名(此域名非彼域名)和一个或者多个值组成(有多个值的值称为多值域(multi-valued))。在ElasticSeach中,每一个文档(Document)均可能会有不一样的域(Field)集合;也就是说文档(Document)是没有固定的模式和统一的结构。文档(Document)之间保持结构的类似性便可(Lucene中的文档(Document)也秉持着相同的规定)。实际上,ElasticSearch中的文档(Document)就是Lucene中的文档(Document)。从客户端的角度来看,文档(Document)就是一个JSON对象(关于JSON格式的相关信息,请参看hhtp://en.wikipedia.org/wiki/JSON)。

### 参数映射(Mapping)

在  1.1节 认识Apache Lucene  中已经提到,全部的文档(Document)在存储以前都必须通过分析(analyze)流程。用户能够配置输入文本分解成Token的方式;哪些Token应该被过滤掉;或者其它的的处理流程,好比去除HTML标签。此外,ElasticSearch提供的各类特性,好比排序的相关信息。保存上述的配置信息,这就是参数映射(Mapping)在ElasticSearch中扮演的角色。尽管ElasticSearch能够根据域的值自动识别域的类型(field type),在生产应用中,都是须要本身配置这些信息以免一些奇的问题发生。要保证应用的可控性。

文档类型(Type)

每一个文档在ElasticSearch中都必须设定它的类型。文档类型使得同一个索引中在存储结构不一样文档时,只须要依据文档类型就能够找到对应的参数映射(Mapping)信息,方便文档的存取。

节点(Node)

单独一个ElasticSearch服务器实例称为一个节点。对于许多应用场景来讲,部署一个单节点的ElasticSearch服务器就足够了。可是考虑到容错性和数据过载,配置多节点的ElasticSearch集群是明智的选择。

集群(Cluster)

集群是多个ElasticSearch节点的集合。这些节点齐心合力应对单个节点没法处理的搜索需求和数据存储需求。集群同时也是应对因为部分机器(节点)运行中断或者升级致使没法提供服务这一问题的利器。ElasticSearch提供的集群各个节点几乎是无缝链接(所谓无缝链接,即集群对外而言是一个总体,增长一个节点或者去掉一个节点对用户而言是透明的<我的理解,仅供参考>)。在ElasticSearch中配置一个集群很是简单,在咱们看来,这是在与同类产品中竞争所体现出的最大优点。

分片索引(Shard)

前面已经提到,集群可以存储超出单机容量的信息。为了实现这种需求,ElasticSearch把数据分发到多个存储Lucene索引的物理机上。这些Lucene索引称为分片索引,这个分发的过程称为索引分片(Sharding)。在ElasticSearch集群中,索引分片(Sharding)是自动完成的,并且全部分片索引(Shard)是做为一个总体呈现给用户的。须要注意的是,尽管索引分片这个过程是自动的,可是在应用中须要事先调整好参数。由于集群中分片的数量须要在索引建立前配置好,并且服务器启动后是没法修改的,至少目前没法修改。

索引副本(Replica)

经过索引分片机制(Sharding)能够向ElasticSearch集群中导入超过单机容量的数据,客户端操做任意一个节点便可实现对集群数据的读写操做。当集群负载增加,用户搜索请求阻塞在单个节点上时,经过索引副本(Replica)机制就能够解决这个问题。索引副本(Replica)机制的的思路很简单:为索引分片建立一份新的拷贝,它能够像原来的主分片同样处理用户搜索请求。同时也顺便保证了数据的安全性。即若是主分片数据丢失,ElasticSearch经过索引副本使得数据不丢失。索引副本能够随时添加或者删除,因此用户能够在须要的时候动态调整其数量。

时间之门(Gateway)

在运行的过程当中,ElasticSearch会收集集群的状态、索引的参数等信息。这些数据被存储在Gateway中。