elasticsearch text fielddata_Elasticsearch 内部数据结构深度解读

本文深入探讨了Elasticsearch的内部数据结构,包括倒排索引、Doc Values和fielddata。倒排索引提供快速全文搜索,但不适合排序;Doc Values适用于排序和聚合;fielddata用于text字段的聚合和排序,但内存消耗大。理解这些概念有助于优化Elasticsearch的性能和存储使用。
摘要由CSDN通过智能技术生成

题记

最近知识星球里几个问题都问到了 doc values、store field、fielddata 等的概念。

问题1:”群主有介绍 doc value, field data, store fields 比较好的文章么?一直感觉有点模糊“

问题2:“请教下星主关于ES存储相关的问题, 一个文档有如下几个地方可能会存储:

  • 倒排索引。

  • Source 字段。

  • store 存储(如果开启)

  • doc_values。

不知道我理解的是否正确?

如果这几个地方都存储, 那是不是可以理解为数据大致会膨胀了4倍?

死磕 Elasticsearch 知识星球(http://t.cn/RmwM3N9)

非常有必要好好梳理一下,于是就有了这篇文章。

Elasticsearch 数据结构的理解和合理使用,对深入理解 Elasticsearch大有裨益!

1、数据存储认知前提

正如 Elastic 官方文档所说:

Elasticsearch 特点之一是:分布式文档存储。

Elasticsearch不会将信息存储为类似列数据库的行(row),而是存储为已序列化为JSON文档的复杂数据结构。

当集群中有多个Elasticsearch节点时,存储的文档会分布在整个集群中,并且可以从任何节点立即访问。

存储文档后,将在1秒钟内(默认刷新频率为1s)几乎实时地对其进行索引和完全搜索。

如何做到快速索引和全文检索的呢? 

Elasticsearch使用倒排索引的数据结构,该结构支持非常快速的全文本搜索。

倒排索引列出了出现在任何文档中的每个唯一单词,并标识了每个单词出现的所有文档。

索引可以认为是文档的优化集合,每个文档都是字段的集合,这些字段是包含数据的键值对。

6c8cf120d8482a1b7b426ae96c0963a5.png

默认情况下,Elasticsearch 对每个字段中的所有数据建立索引,并且每个索引字段都具有专用的优化数据结构。

例如,文本字段存储在倒排索引中,数字字段和地理字段存储在BKD树中。

数据类型 数据结构
text/keyword 倒排索引
数字/地理位置 BKD树

不同字段具有属于自己字段类型的特定优化数据结构,并具备快速响应返回搜索结果的能力使得 Elasticsearch 搜索飞快!

1、Inverted Index 倒排索引

1.1 倒排索引定义

面对海量内容,如何快速的找到包含用户查询词的内容,倒排索引扮演了关键角色。

倒排索引是单词到文档映射关系的最佳实现形式。

下图是:书的末页的索引结构,展示了核心关键词与书页码的对应关系。

a12cda52f2035e1bd20d74640095fe9f.png

试想一下,没有这个索引页,根据关键词从全书查找有多慢,就能直观体会出索引的妙处!

1.2 倒排索引示例

拿官方文档的示例:

假设我们有两个文档,每个文档的 content 域包含如下内容:

- 1、The quick brown fox jumped over the lazy dog
- 2、Quick brown foxes leap over la
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值