ElasticSearch中的field data(正排索引)

Elasticsearch核心原理与后端开发实战指南 搜索引擎技术是现代后端架构的关键组件,其核心原理基于倒排索引机制,通过建立词项到文档的映射关系实现毫秒级检索。相比传统关系型数据库的LIKE查询,专用搜索引擎如Elasticsearch在百万级数据场景下可实现近百倍的性能提升。该技术广泛应用于电商商品搜索、日志分析、内容推荐等场景,特别是在处理中文分词、相关性排序等复杂需求时展现独特优势。Elasticsearch作为当前最主流的分布式搜索解决方案,其近实时搜索、强大的聚合分析能力以及与Spring Boot等现代框架的无缝集成,使其成为后端开发者必须掌握 阅读详情

 

glrh123 2016-07-29 11:07:01  3137  已收藏 1
分类专栏: ElasticSearch
版权
主要参考文章:http://www.tuicool.com/articles/B3QnQzE

正排索引与倒排索引
Elasticsearch使用一种叫做倒排索引(inverted index)的结构来做快速的全文搜索。倒排索引由在文档中出现的唯一的单词列表,以及对于每个单词在文档中的位置组成。倒排索引的结构如下图,它存储的内容是“哪些词语出现在了哪些文档中”,这种结构决定了它不能很好的支持对文档的索引、排序、聚合的操作,因此Elasticsearch中增加了field data的数据结构。


Elasticsearch cluster中的内存多半都被消耗在了field data(也就是我们常说的正排索引)上,field data主要用于:
·按照字段排序(sort)
·按照字段进行聚合(Aggregations)
·过滤器,例如地理位置过滤
·script排序中使用到某些字段

field data(正排索引)的结构是“哪些文档中包含哪些词语”。形式如下图:


field data是以段(segment)为单位进行构建的,当一个新的段打开时,老的field data仍然有效,只有和新段相对应的field data会被载入到内存。


正排索引的内存使用
将field data都载入堆内存可以提高访问速度,但是载入过多数据到内存中会引起频繁GC甚至是OutOfMemory异常。
field data默认是懒加载模式,在遇到query之后才开始将倒排索引正排化,它不仅仅在内存中载入命中的文档,而是会载入索引中所有文档的field data,为了以后的查询做准备。


优化内存
1、过滤field data,告诉ES在哪些term不要在field data中载入。
下图是按照频率过滤,也可以按照正则表达式过滤。


2、设置预先加载field data
1) Eagerly load fielddata

2) Eagerly load global ordinals


3) Prepopulate caches with warmers
具体设置参考:http://zhaoyanblog.com/archives/764.html

3、DocValues
field data可以被写在磁盘中,实现这种操作的选项叫做 doc values。
doc values允许你使用大量的field data数据而不必担心内存被大量占用的问题。当你使用doc values后,你的堆内存就可以分配更小的值来加快垃圾回收的速度。
doc values是在索引阶段就创建的,它的预创建使得它的初始化更加容易。
doc values适用于numeric, date, Boolean, binary, geo-point字段,还有"not_analyzed"的string字段。


补充:
field data的格式
按字段的类型的不同,字段对应的doc values的类型可以有不同:

1.String字段
paged_bytes (默认格式): 不同的term顺序地存储在一个大的buffer中,每个文档被映射到它所包含的term在buffter中的索引。
fst:term以FST (finite state transducer)格式存储,载入慢一些,但是在很多term有相同的前缀或者后缀的情况下能够减少内存的使用。
doc_values:索引建立时计算field data并将它存储在磁盘上,占用的内存最少,但是对应的字段必须是not_analyzed。

2.Numeric字段
array (默认格式):field data在内存中以数组的形式存储。
doc_values:索引建立时计算field data并将它存储在磁盘上,占用的内存最少。

3.Geo字段
array (default):经度和维度在内存中以数组的形式存储。
doc_values:索引建立时计算field data并将它存储在磁盘上,占用的内存最少。
————————————————
版权声明:本文为优快云博主「glrh123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/glrh123/article/details/52062762

Elasticsearch系列---Term Vector工具探查数据 概要 本篇主要介绍一个Term Vector的概念和基本使用方法。 term vector是什么? 每次有document数据插入时,elasticsearch除了对document进行正排、倒排索引的存储之外,如果此索引的field设置了term_vector参数,elasticsearch还会对这个的分词信息进行计算、统计,比如这个document有多少个field,每个field的值分词处理后得到的term的df值,ttf值是多少,每个term存储的位置偏移量等信息,这些统计信息统称为term vec 阅读详情

相关推荐

Elasticsearch入门指南:从核心概念到环境搭建与实战

在数据处理领域,全文搜索和实时分析是应对海量非结构化数据挑战的核心技术。其原理基于倒排索引,通过建立词汇到文档的映射,实现了远超传统数据库LIKE查询的检索速度。这项技术的核心价值在于能够将数据从简单的存储,转化为可被快速检索和深度分析的资产,从而支撑起从电商商品搜索、应用日志分析到安全监控等多种应用场景。本文聚焦于分布式搜索与分析引擎Elasticsearch,详细解析了其集群、节点、分片、索引等核心概念,并提供了在Windows与Linux系统下的详细环境搭建步骤,同时介绍了Head与Kibana这两个

weixin_34032792的博客 371

Elasticsearch:fielddata 介绍

默认情况下,大多数字段都已编入索引,这使它们可搜索。 但是,脚本中的排序,聚合和访问字段值需要与搜索不同的访问模式。 搜索需要回答“哪个文档包含该术语?”这个问题,而排序和汇总则需要回答一个不同的问题:“此字段对该文档的值是什么?”。 大多数字段可以将索引时生产的磁盘doc_values用于此数据访问模式,但是文本(text)字段不支持doc_values。 替代的方案,文本(text)字段...

Elastic 中国社区官方博客 4991

从一次线上OOM排查说起:我是如何通过禁用fielddata拯救了我们的Elasticsearch集群

本文详细记录了作者如何通过禁用Elasticsearch中的fielddata功能解决线上OOM故障。当核心ES集群因`content.keyword`字段占用12GB内存而崩溃时,团队发现fielddata机制导致JVM堆内存耗尽。通过对比fielddata与doc_values的差异,实施紧急禁用措施并重建索引迁移到doc_values,最终建立三层防御体系确保集群稳定运行。

weixin_30435261的博客 161

Elasticsearch学习---fielddata应用介绍

前言

自律使我自由 3441

【Elasticsearch】es fielddata 字段数据

在es中,text类型的字段使用一种叫做fielddata的查询时内存数据结构。当字段被排序,聚合或者通过脚本访问时这种数据结构会被创建。它是通过从磁盘读取每个段的整个反向索引来构建的,然后存存储在java的堆内存中。Fielddata针对text字段在默认时是禁用的,Fielddata会占用大量堆空间,尤其是在加载大量的文本字段时。一旦将字段数据加载到堆中,它在该段的生命周期内将一直保留在那里。同样,加载字段数据是一个昂贵的过程,可能导致用户遇到延迟的情况。这就是默认情况下禁用字段数据的原因。

九师兄 2054

国宇测试盒GH7009 SPI读操作全解析:从接线到代码实现的避坑指南

本文详细解析了国宇GH7009测试盒进行SPI读操作的完整流程与避坑要点。重点阐述了硬件连接中IO2时序控制引脚的关键作用,提供了从接线方案、电源处理到上位机代码实现的实战指南,并针对常见的数据不稳定、特定寄存器读取失败等问题给出了具体解决方案。

dapp9builder的博客 224

elasticsearch中 fieldData

fieldData是干啥的? 当我们对text类型的字段进行首次聚类、排序、或者执行脚本的时候。将磁盘中的数据构建到内存够中。 默认情况下,大多数字段都已编入索引,这使它们可搜索。 但是,脚本中的排序,聚合和访问字段值需要与搜索不同的访问模式。 搜索需要回答“哪个文档包含该术语?”这个问题,而排序和汇总则需要回答一个不同的问题:“此字段对该文档的值是什么?”。 大多数字段可以将索引时生产的磁盘doc_values(doc_values | Elasticsearch Guide [8.1] | E

Angus 3143

WPF MVVM实战:构建可绑定的RichTextBox富文本编辑器

本文详细介绍了如何在WPF MVVM模式下构建可绑定的RichTextBox富文本编辑器,解决标准RichTextBox.Document属性不支持数据绑定的问题。通过创建自定义BindableRichTextBox控件,实现FlowDocument的绑定支持,并分享插入图片、文本格式控制等实战技巧,帮助开发者高效开发富文本编辑功能。

weixin_33717117的博客 307

Elasticsearch实战(十八)--ES搜索Doc Values/Fielddata 正排索引 深入解析

ES搜索Doc Values和Fielddata 正排索引 深入解析,对docvalues及fielddata优势劣势及使用场景进行分析

流浪的喵的博客 2281

Python抓取摄像头图像,进行AI识别(一)

本文介绍了如何用Python获取海康威视摄像头的图像并进行AI识别。主要内容包括:1)准备工作,包括摄像头IP设置和密码重置方法;2)使用Python的Requests库通过ISAPI接口获取实时图像;3)示例代码展示如何保存摄像头图像。整个过程为后续AI图像识别提供了基础,通过简单的Python代码即可实现专业监控设备的图像采集功能。

Hahafantuan的博客 1516

EEGLAB数据预处理基本流程GUI实操指南

按钮,会出现如上图所示的长条形对话框,方框里面是所有电极的名称,这时将需要的剔除的电极选择上,如上图,我选择了 VEOG这个电极(该电极表示是垂直眼电),然后点“OK”,在弹出的对话框中自行确定是否需要修改命名。坏导是指在数据采集时,由于各种原因(如,电极本身问题或阻抗不好等)导致数据记录有问题,但是在后期又特别想要该通道的数据,那么就可以利用插值的方法进行——利用该导联周边的几个电极点的均值作为该导的数据。上图的图是通过IClabel的工具箱进行自动判断的,可以帮助自动识别出哪些是Eye的成分。

fdgdf5535的博客 6400

ElasticSearch-为什么不能使用_id排序

关于elasticsearch中使用_id排序

MZZHAO23的博客 2218

麒麟系统下的多媒体革命:VLC在kylinV10上的性能优化与调试技巧

本文详细介绍了在麒麟kylinV10系统上优化VLC多媒体播放性能的实战技巧,特别针对飞腾FT-2000/4硬件平台。从源码编译调优到硬件加速配置,提供全面的性能提升方案,帮助开发者在国产操作系统上构建高效媒体播放环境。

weixin_29168675的博客 458

Elasticsearch 排序及 Doc Values & Field Data

gsgsgs

爱死亡机器人 1044

如何解除“无法完成操作 因为文件包含病毒或潜在垃圾软件”

当运行软件遇到“无法完成操作 因为文件包含病毒或潜在垃圾软件”时,如何解决?控制面板-系统和安全-Windows Defender防火墙-自定义设置,将专用网络及公用网络关闭。点击后,选择“病毒和威胁防护”-管理配置。进入安全中心后,选择“病毒和威胁防护”将需要排斥的选项输入后,保存配置即可。2:打开windows安全中心。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 6万+

将Keil中的变量数组导出

首先,写好导出数据的函数。

小柚子的博客 1952

【Elasticsearch】【转】Elasticsearch中使用_id排序导致 data too large 问题

elasticsearch

闲时不要多想 615

Android SystemUI——自定义状态栏和导航栏(十二)

通过前面的文章内容,我们了解了Android系统原生的状态栏StatusBar和车载系统状态栏CarStatusBar的启动流程以及视图构建流程,这里我们来简单的看一下自定义状态栏和导航栏视图的实现流程。

小旭的专栏 2012

【elasticsearch】文件结构

56rPa6sFRV6_L5HavKCpnw ├── 1 │ ├── index │ │ ├── _6.dii // Point Values │ │ ├── _6.dim // Point Values │ │ ├── _6.fdt // Field Data,存储了正排存储数据,写入的原文存储在这 │ │ ├── _6.fdx // Field Index,

jing_flower的博客 1821

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Elasticsearch】映射:fielddata 详解

fielddata 是 Elasticsearch 中一种数据结构,用于在内存中缓存字段数据。当需要对 text 字段或其他非 doc_values 支持的字段执行上述操作时,Elasticsearch 需要将这些字段的值加载到内存中,这就是 fielddata 的作用。

Data · Model · Agent · Repeat 1553

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ElasticSearch核心原理与实战调优:从倒排索引到集群部署

在当今大数据时代,高效的数据检索与分析能力是技术架构的核心需求。搜索引擎技术通过构建倒排索引这一核心数据结构,实现了从海量非结构化数据中快速定位信息的能力。其原理是将文档内容分词,建立词项到文档的映射表,使得关键词查询变为高效的集合运算,从而支撑起毫秒级的搜索响应。这项技术的核心价值在于解决了数据“存得快”但“找得慢”的普遍矛盾,广泛应用于日志分析、商品搜索、实时监控等场景。本文聚焦于该领域的代表性工具ElasticSearch,深入剖析其分布式架构与倒排索引的实现机制,并结合分片、节点角色等关键概念,提供

weixin_34235457的博客 438

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JB3-6-ELK

ElasticSearch基础,倒排索引原理,Kibana容器,IK中文分词器,REST常用操作,LogStash,ELK日志收集,ELK同步MySQL,ElasticSearchRepository 等。

周航宇的博客 2563

Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata

一 序 本文属于极客时间Elasticsearch核心技术与实战学习笔记系列。 二排序 ES 默认采用相关性算分对结果进行降序排序 可以通过设置 sorting 参数,自行设定排序 如果不指定_score, 算分为 null 指定order_date 排序,所以打分是null. 2.1多字段进行排序 组合多个条件 优先考虑写在前面的排序 支持对相关性算分进行排序 因为是全部查询,所以算分都是1. 2.2对 Text 类型排序 对Text字段进行排序,默认会报错...

bohu83的博客 477

ES查询性能瓶颈分析:从mappings设计说起

ES查询慢?往往卡在mappings设计不合理——动态映射滥用、字段类型误配、keyword与text混用,都是面试官最爱挖的坑。结合es面试题实战场景,拆解如何通过精准字段定义、合理关闭_source和_norms等细节,直击性能根因。

weixin_42561464的博客 363
上一篇: Elasticsearch-6.x 倒排索引,doc_values,Fielddata, store研究
下一篇: ElasticSearch优化系列四:ES的heap是如何被瓜分掉的
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值