lucene和ElasticSearch基本概念

lucene基本概念

1.索引(Index)

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

2.段(Segment)

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

3.文档(Document)

文档是我们键索引的基本单位,不同的文档是保存在不同的段中的,一个段可以包含多篇文档。

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

4.域(Field)

一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者等,都可以保存在不同的域里

不同域的索引方式不同

5.词(Term)

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

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

词向量

又称文档向量,由词文本和词频率组成。

语义树

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

权重

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

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

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

Posting

将一个词条所索引的文档(一般用文档编号表示)称之为Posting,那么一个词条索引的多个文档就称之为Posting-list

Payload

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

倒排表(Invented Indexing)

倒排表是Lucene索引采用的一套数据结构,这种结构以词为中心,能够快速找到包含该词的文档,倒排表是一种数据结构,lucene的数据文件一起构成了一张大的倒排表,而不是具体的某文件存储的倒排结构。

文档编号:

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

ES基本概念:

索引(Index)

ElasticSearch把数据存到一个或者多个索引中,如果用关系型数据库模型对比,索引的地位与数据库实例相当。索引存放和读取的基本单元是文档,ElasticSearch内部用Apache Lucence实现索引中数据的读写,在ElasticSearch中被视为单独的一个索引,在Lucene中可能不止一个,这是因为在分布式体系中,ElasticSearch会用到分片(shareds)和备份(replicas)机制将一个索引(index)存储多份。

文档

在ElasticSearch中,文档是主要的存在实体,所有的ElasticSearch应用需求到最后都可以统一建模成一个检索模型:检索相关文档。文档由一个或者多个域组成,每个域由一个域名和一个或者多个值组成。在ElasticSearch中,每个文档都可能会有不同的域集合,也就是说文档(Document )是没有固定的模式和统一的结构。文档之间保持结构的相似性即可(Lucene中的文档),从客户端的角度来看,文档(Document)就是一个Json对象。

参数映射(mapping)

所有的文档在存储之前都必须经过分析流程。用户可以配置输入文本分解成token的方式,哪些token应该被过滤掉,或者其他的处理流程,比如去除HTML标签,此外,ElasticSearch提供的各种特性,比如排序的相关信息。保存上述配置信息,这就是参数映射在ElasticSearch中扮演的角色.尽管ElasticSearch可以根据域的值自动识别域的类型,在生产应用中,需要自己配置信息。

文档类型(Type):

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

节点(Node):

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

集群(Cluster)

集群是多个ElasticSearch节点的集合。这些节点齐心协力对单个节点无法处理的搜索需求和数据存储需求。集群同时也是应对由于部分机器(节点)运行中断或者升级导致无法提供服务这一问题的利器。ElasticSearch提供的集群各个节点几乎是无缝连接(所谓无缝连接,即集群对外而言是一个整体,增加一个节点或者去掉一个节点对用户而言是透明的),在ElasticSearch中配置一个集群非常简单,在我们看来,这是在与同类产品中竞争所体现出来的最大优势。

分片索引(shard)

前面已经提到,集群能够存储超出单机容量的信息。为了实现这种需求,ElasticSearch把数据分发到多个存储Lucene索引的物理机上。这些Lucene索引称为分片索引,这个分发的过程称为索引分片。在ElasticSearch集群中,索引分片是自动完成的,而且所有分片索引是作为一个整体呈现给用户的。需要事先调整好参数。因为集群中分片的数量需要在索引创建前配置好,而且服务启动后是无法修改的

索引副本(Replica)

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

时间之门(Gateway)

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






猜你喜欢

转载自blog.csdn.net/baibaichenchen/article/details/75545381