Skip to content

问题

  • 1.luncene如何实现准实时索引?
  • 2.写入的数据是如何变成ES中可以被检索和聚合的索引内容?
  • 3.什么是segment?
  • 4.什么是commit?

基础概念

Shard(分片)

  • 1.一个Shard就是一个Lucene实例,即一个完整的搜索引擎,会消耗一定文件句柄、内存、以及 CPU 运转
  • 2.一个索引可以只包含一个Shard,只是一般情况下会用多个分片,可以拆分索引到不同的节点上,分担索引压力
  • 3.用于计算相关度的词项统计信息是基于分片的。如果有许多分片,每一个都只有很少的数据会导致很低的相关度。

segment(段)

elasticsearch中的每个分片包含多个segment,每一个segment都是一个倒排索引;在查询的时,会把所有的segment查询结果汇总归并后最为最终的分片查询结果返回;在创建索引的时候,elasticsearch会把文档信息写到内存bugffer中(为了安全,也一起写到translog),定时(可配置)把数据写到segment缓存小文件中,然后刷新查询,使刚写入的segment可查。

  • 1.segment是不可变的,物理上你并不能从中删除信息,所以在删除文档的时候,是在文档上面打上一个删除的标记,然后在执行段合并的时候,进行删除
  • 2.索引segment段的个数越多,搜索性能越低且消耗内存更多

document(文档)

索引和搜索的主要数据载体,对应写入到ES中的一个doc。ES中的最小的、整体的数据单位,比如一条用户订单信息是一个Doc。一个index中存放了很多Doc

field

document中的各个字段

term

词项,搜索时的一个单位,代表文本中的某个词

token

词条,词项(term)在字段(field)中的一次出现,包括词项的文本、开始和结束的位移、类型等信息

index(索引)

在ES中类似数据库中db,有1个或多个type,由若干shard分片组成

Lucene Index

注意和Es Index区别。Lucene Index是由若干段和提交点文件组成。 参照图

参考

文件下载-ES实战手册-阿里 Elasticsearch:Node roles 介绍 - 7.9 之后版本_Elastic 中国社区官方博客的博客-CSDN博客_elasticsearch node.role