从Lucene到Elasticsearch

Lucene的总体架构:
    文档:索引与搜索的主要数据载体,它包含一个或多个字段,存放将要写入索引或将索引搜索出来的数据。
    字段:文档的一个片段,它包括两个部分:字段的名称和内容。
    词项:搜索时的一个单位,代表文本中的某个词。
    词条:词项在字段中的一次出现,包括词项的文本,开始和结束的位移以及类型。
Apache Lucene将写入索引的所有信息组织成一种名为倒排索引(inverted index)的结构。该结构是一种将词项映射到文档的数据结构,其工作方式与传统关系数据库不同,你大可认为倒排索引是面向词项而不是面向文档的。

例如:
         

索引后的结构如图所示:

 
     每个索引由多个断组成,每个段只会被创建一次但会被查询多次,索引期间,段经创建就不会再被修改。
    多个段会在一个叫断合并的阶段被合并在一起,而且要么强制执行,要么由lucene的内在机制决定在某个时刻执行,合并后段的数量会减少,但是会增大。段合并非常耗I/O,且合并期间有些不再使用的信息也将被清除掉。例如,被删除的文档。对于容纳相同数据的索引,段的数量较少时,搜索的速度更快。尽管如此不要强制进行段合并。

文档中数据是如何转化为倒排索引的呢?
     这个转换过程称为分析(analysis):文本分析由分析器来执行,而分析器由分词器(tokenizer),过滤器(filter)和字符映射器(character mapper)组成。
    字符映射器:用于调用分词器之前的文本预处理操作,如HTML文本的去标签处理。
    分词器:将文本切割成词条,其中携带各种额外信息的词项,这些信息包括:词项在原始文本中的位置,词项的长度。分词器的工作成果称为词条流,因为这些词条被一个接一个地推送给过滤器处理。
    过滤器:过滤器的数额可选,可以为0个,1个或者多个。用于处理词条流中的词条。例如:移除,修改词条流中的词条,甚至可以创造新的词条。Lucene提供了很多现成的过滤器:小写过滤器、ASCII过滤器、同义词过滤器等。当分析器中有多个过滤器时,会逐个处理。

     在检索时,如果使用了某个查询分析器,那么查询串就会被分析。当然,你也可以选择不进行查询分析。有一点需要牢记,ElasticSearch中有些查询会被分析,而有些则不会,例如,前缀查询(prefix query)不会被分析,而匹配查询(match query )会被分析。
     切记:索引期与检索期的文本分析器要采用相同的分析器,只有查询分析出来的词项和索引中的词项能匹配上,才会返回预期的文档集。

下面为Lucene的索引流程图:
 
        
    ElasticSearch的基本概念:
    索引:Elasticsearch中的索引可能由一个或多个Lucene索引构成,具体细节由Elasticsearch的索引分片(shard)、复制(replica)机制及其配置决定的。
    文档:文档由字段构成,每个字段有它的字段名以及一个或多个字段值。事实上,Elasticsearch的文档最后都存储为Lucene文档了,从客户端的角度看,文档是一个JSON对象。
    映射:设置字段内容信息。决定字段的过滤,排序,类型等。
    类型:允许用户在一个索引中存储多种文档类型,并为不同文档类型提供不同的映射。

    启动过程:
    在Elasticsearch节点启动时,它使用广播技术(也可配置为单播)来发现同一个集群中的其他节点并与他们连接。集群中会有一个节点被选为管理节点。该节点负责集群的状态管理以及在集群拓扑变化时做出反应,分发索引分片至集群的相应节点上。管理节点读取集群的状态信息,并在必要时进行恢复处理。在该阶段,管理节点会检查索引索引分片并决定哪些分片用于主分片。然后,整个集群进入黄色状态。
   
    故障检测:
    管理节点会发送ping请求至其他几点,然后等待响应,如果没有响应,则该节点会从集群中移除。对于每个丢失的主分片,一个新的主分片将会从原来的主分片的副本中脱颖而出。如果主分片的副本过少,管理节点将决定基于某个主分片创建分片和副本。
    注意:建索引操作只会发生在主分片上,而不是副本上。当把一个索引请求发送至某个节点时,如果该节点没有对应的主分片或者只有副本,那么这个请求会被转发到拥有正确的主分片的节点。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值