`
weitao1026
  • 浏览: 1052721 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Elasticsearch中的segment理解

 
阅读更多

在Elasticsearch中, 需要搞清楚几个名词,如segment/doc/term/token/shard/index等, 其实segment/doc/term/token都是lucene中的概念。这样有助于更深入的了解和使用ES。

document: 索引和搜索的主要数据载体,对应写入到ES中的一个doc。

field: document中的各个字段。

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

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

Lucene内部使用的是倒排索引的数据结构, 将词项(term)映射到文档(document)。

例如:某3个文档,假设某个字段的文本如下

ElasticSearch Server (文档1)

Matering ElasticSearch (文档2)

Apache solr 4 Cookbook (文档3)

term 次数 doc id
4 1 3
Apache 1 3
Cookbook 1 3
ElasticSearch 2 1,2
Matering 1 1
Server 1 1
solr 1 3


index: 在ES中类似数据库中db

 

shard: 

A "shard" is an instance of Lucene. It is a fully functional search engine in its own right. An "index" could consist of a single shard, but generally consists of several shards, to allow the index to grow and to be split over several machines.

A "primary shard" is the main home for a document. A "replica shard" is a copy of the primary shard that provides (1) failover in case the primary dies and (2) increased read throughput

segment:

 

Each shard contains multiple "segments", where a segment is an inverted index. A search in a shard will search each segment in turn, then combine their results into the final results for that shard.

While you are indexing documents, Elasticsearch collects them in memory (and in the transaction log, for safety) then every second or so, writes a new small segment to disk, and "refreshes" the search.

This makes the data in the new segment visible to search (ie they are "searchable"), but the segment has not been fsync'ed to disk, so is still at risk of data loss.

Every so often, Elasticsearch will "flush", which means fsync'ing the segments, (they are now "committed") and clearing out the transaction log, which is no longer needed because we know that the new data has been written to disk.

The more segments there are, the longer each search takes. So Elasticsearch will merge a number of segments of a similar size ("tier") into a single bigger segment, through a background merge process. Once the new bigger segment is written, the old segments are dropped. This process is repeated on the bigger segments when there are too many of the same size.

Segments are immutable. When a document is updated, it actually just marks the old document as deleted, and indexes a new document. The merge process also expunges these old deleted documents.

参考:

https://www.elastic.co/guide/en/elasticsearch/reference/current/glossary.html

http://stackoverflow.com/questions/15426441/understanding-segments-in-elasticsearch

分享到:
评论

相关推荐

    Elasticsearch-深入理解索引原理

    Elasticsearch-深入理解索引原理 Elasticsearch 中索引(Index)的概念是非常重要的,它是 Elasticsearch 存储数据的基本单元。索引是一个具有类似特性的文档的集合,类比传统的关系型数据库领域来说,索引相当于 ...

    Elasticsearch-深入理解索引原理1

    在深入理解Elasticsearch(简称ES)的索引原理前,我们需要先明白基本概念。ES是一种分布式全文搜索引擎,它将数据存储在索引中,这些索引类似于关系型数据库中的数据库,但具备更高的可扩展性和实时性。索引可以...

    Elasticsearch 存储方式和管理优化细节1

    在Elasticsearch中,数据存储的基本单位是段(segment),每个段都是一个倒排索引,由Lucene生成。每次数据写入后,Elasticsearch会将数据缓冲到内存中的buffer,并同时记录在translog日志中。数据写入后,经过一定...

    ElasticSearch写入原理及优化.docx

    Elasticsearch(ES)是一种流行的分布式搜索引擎和分析引擎,它以高效、实时的特性...综上,理解Elasticsearch的内部工作原理并针对性地进行优化,能显著提升系统的性能和效率,满足大规模数据处理和高并发查询的需求。

    Elasticsearch 28道面试题和答案.docx

    擎之所以能快速地进行全文检索,就是依赖于这种数据结构。在倒排索引中,每个文档中的词项(token)...掌握这些关键知识点,对于理解 Elasticsearch 的工作原理和优化实践至关重要,有助于在面试中展示你的专业能力。

    ES主分片和副本数据大小不一样的情况

    在Elasticsearch (ES) 中,主分片和副本分片的数据大小可能不一致,这主要是由于它们内部的segment数量和结构差异所引起的。在理解这个问题之前,我们需要先了解一下ES的基本概念。 Elasticsearch 是一个分布式、...

    Android OpenGL ES绘制线段Line Segment.doc

    OpenGL ES 是一种针对嵌入式系统的图形库,广泛应用于移动设备如智能手机和平板电脑上,用于渲染2D、3D...理解这些基本概念对于进一步学习OpenGL ES编程至关重要,包括如何处理几何数据、设置颜色以及控制绘制模式等。

    es,bx编程索引法死循环算法.rar

    首先,ES(Extra Segment)和BX(Base Index)是8086/8088处理器中的两个寄存器。在16位的80x86时代,内存访问需要段基址和偏移地址的组合。段寄存器(如CS, DS, SS, ES等)存储了段基址,而BX、BP、SI、DI则作为...

    深入理解Linux内核笔记

    段寄存器存放Segment Selectors,其中包括cs(代码段)、ss(堆栈段)、ds(数据段)、es、fs和gs。其中,cs寄存器的高两位用于指定当前特权级(Current Privilege Level,CPL),以控制对代码段的访问权限。 硬件...

    Elastic Stack 技术指南

    此外,还讲解了如何通过Elasticsearch的架构原理进行性能优化,包括shard的allocate控制、自动发现配置、增删改查操作、搜索请求、Painless脚本、reindex接口、segment、buffer和translog对实时性的影响,以及...

    面试指南-Lucene:ES篇.md

    ### Lucene与Elasticsearch核心知识点详解 ...以上内容涵盖了Lucene和Elasticsearch中的关键知识点,从倒排索引的基本原理到具体的性能调优技巧,旨在帮助读者全面掌握这两款强大工具的核心技术和最佳实践。

    深入探索:汇编语言中的寄存器世界

    在汇编语言编程中,寄存器的作用至关重要。...在x86架构中,主要有CS(Code Segment)、DS(Data Segment)、ES(Extra Segment)和SS(Stack Segment)四个段寄存器 。 c. 指针寄存器 指针寄存器主要用于存储指针或

    es,bx地址跳到指定位置单顺序跳出流程指令.rar

    1. **ES (Extra Segment) 寄存器**: 在16位的x86处理器中,内存被分为多个段,每个段都有一个段寄存器与之对应,如CS(代码段)、DS(数据段)、SS(堆栈段)和ES。`ES`寄存器用于指定额外的数据段,通常在处理...

    汇编+07111505+1120151828+兰天+20171

    虽然这个代码片段主要关注的是汇编语言的基本操作,但考虑到标签中提到了"数据库"和"Elasticsearch",我们可以推测这个程序可能是在一个更复杂系统的一部分,负责处理与数据库交互的底层数据格式。Elasticsearch是一...

    02-腾讯云 ES8 新一代高性能高精度 RAG 向量检索引擎 - 黄国航 深圳 20240727

    微信读书是一个面向广大用户的电子书阅读平台,为了让用户在阅读过程中能够更好地理解和掌握书中的内容,引入了AI问书系统。然而,面对超10亿级别的向量规模,如何高效地处理书籍数据、满足用户提问的需求,以及如何...

    elk中文指南1

    《ELK中文指南1》是关于Logstash、Elasticsearch和Kibana(ELK stack)的入门教程,旨在帮助用户理解和使用这个强大的日志管理和分析工具。 **1. Logstash** Logstash是一款用于处理和收集事件及日志的工具。它的...

    答案_作业C1909181

    - **ES (Extra Segment)**:额外段寄存器,在某些旧的16位编程中使用,现代编程中一般不常用。 - **FS**和**GS**:额外的段寄存器,通常用于存储线程相关的数据或者其他特定用途的内存区域。 【部分内容】中的...

Global site tag (gtag.js) - Google Analytics