在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 中索引(Index)的概念是非常重要的,它是 Elasticsearch 存储数据的基本单元。索引是一个具有类似特性的文档的集合,类比传统的关系型数据库领域来说,索引相当于 ...
在深入理解Elasticsearch(简称ES)的索引原理前,我们需要先明白基本概念。ES是一种分布式全文搜索引擎,它将数据存储在索引中,这些索引类似于关系型数据库中的数据库,但具备更高的可扩展性和实时性。索引可以...
在Elasticsearch中,数据存储的基本单位是段(segment),每个段都是一个倒排索引,由Lucene生成。每次数据写入后,Elasticsearch会将数据缓冲到内存中的buffer,并同时记录在translog日志中。数据写入后,经过一定...
Elasticsearch(ES)是一种流行的分布式搜索引擎和分析引擎,它以高效、实时的特性...综上,理解Elasticsearch的内部工作原理并针对性地进行优化,能显著提升系统的性能和效率,满足大规模数据处理和高并发查询的需求。
擎之所以能快速地进行全文检索,就是依赖于这种数据结构。在倒排索引中,每个文档中的词项(token)...掌握这些关键知识点,对于理解 Elasticsearch 的工作原理和优化实践至关重要,有助于在面试中展示你的专业能力。
在Elasticsearch (ES) 中,主分片和副本分片的数据大小可能不一致,这主要是由于它们内部的segment数量和结构差异所引起的。在理解这个问题之前,我们需要先了解一下ES的基本概念。 Elasticsearch 是一个分布式、...
OpenGL ES 是一种针对嵌入式系统的图形库,广泛应用于移动设备如智能手机和平板电脑上,用于渲染2D、3D...理解这些基本概念对于进一步学习OpenGL ES编程至关重要,包括如何处理几何数据、设置颜色以及控制绘制模式等。
首先,ES(Extra Segment)和BX(Base Index)是8086/8088处理器中的两个寄存器。在16位的80x86时代,内存访问需要段基址和偏移地址的组合。段寄存器(如CS, DS, SS, ES等)存储了段基址,而BX、BP、SI、DI则作为...
段寄存器存放Segment Selectors,其中包括cs(代码段)、ss(堆栈段)、ds(数据段)、es、fs和gs。其中,cs寄存器的高两位用于指定当前特权级(Current Privilege Level,CPL),以控制对代码段的访问权限。 硬件...
此外,还讲解了如何通过Elasticsearch的架构原理进行性能优化,包括shard的allocate控制、自动发现配置、增删改查操作、搜索请求、Painless脚本、reindex接口、segment、buffer和translog对实时性的影响,以及...
### Lucene与Elasticsearch核心知识点详解 ...以上内容涵盖了Lucene和Elasticsearch中的关键知识点,从倒排索引的基本原理到具体的性能调优技巧,旨在帮助读者全面掌握这两款强大工具的核心技术和最佳实践。
在汇编语言编程中,寄存器的作用至关重要。...在x86架构中,主要有CS(Code Segment)、DS(Data Segment)、ES(Extra Segment)和SS(Stack Segment)四个段寄存器 。 c. 指针寄存器 指针寄存器主要用于存储指针或
1. **ES (Extra Segment) 寄存器**: 在16位的x86处理器中,内存被分为多个段,每个段都有一个段寄存器与之对应,如CS(代码段)、DS(数据段)、SS(堆栈段)和ES。`ES`寄存器用于指定额外的数据段,通常在处理...
虽然这个代码片段主要关注的是汇编语言的基本操作,但考虑到标签中提到了"数据库"和"Elasticsearch",我们可以推测这个程序可能是在一个更复杂系统的一部分,负责处理与数据库交互的底层数据格式。Elasticsearch是一...
微信读书是一个面向广大用户的电子书阅读平台,为了让用户在阅读过程中能够更好地理解和掌握书中的内容,引入了AI问书系统。然而,面对超10亿级别的向量规模,如何高效地处理书籍数据、满足用户提问的需求,以及如何...
《ELK中文指南1》是关于Logstash、Elasticsearch和Kibana(ELK stack)的入门教程,旨在帮助用户理解和使用这个强大的日志管理和分析工具。 **1. Logstash** Logstash是一款用于处理和收集事件及日志的工具。它的...
- **ES (Extra Segment)**:额外段寄存器,在某些旧的16位编程中使用,现代编程中一般不常用。 - **FS**和**GS**:额外的段寄存器,通常用于存储线程相关的数据或者其他特定用途的内存区域。 【部分内容】中的...