Elasticsearch词频统计实现与原理解读

robinent
发布于 2022-4-29 13:50
浏览
0收藏

Elasticsearch词频统计实现与原理解读-鸿蒙开发者社区

Elasticsearch词频统计实现与原理解读-鸿蒙开发者社区Elasticsearch词频统计实现与原理解读-鸿蒙开发者社区Elasticsearch词频统计实现与原理解读-鸿蒙开发者社区Elasticsearch词频统计实现与原理解读-鸿蒙开发者社区

5、核心知识点解读


"fielddata":"true" 是什么?

 

5.1 基础认知:text类型不能用于聚合


所有字段是默认被 indexed(被索引的),这使得它们是可搜索的.可以在脚本中排序,聚合和获取字段值,但是需要不同的搜索模式.

搜索需要回答一个问题 “哪个 document(文档) 包含这个 term(词条)”,然而排序和聚合需要回答一个不同的问题 " 这个字段在这个 document(文档)中的值是多少?".

许多字段可以使用 index-time,在磁盘上的 doc_values 支持这种数据访问模式, 但是 text 字段不支持 doc_values

 

5.2 docvalues和fileddata的本质区别?


docvalues 它保存某一列的数据,并索引它,用于加快聚合和排序的速度。

fileddata 它保存某一列的数据,并索引它,用于加快聚合和排序的速度。和docvalues不一样的是,fielddata保存的是text类型的字段分词后的terms,而不是保存源字段数据。

 

5.3 fileddata的特点


相反,text 字段使用查询时存在于内存的数据结构 fielddata.这个数据结构是第一次将字段用于聚合,排序,或者脚本时基于需求构建的。

它是通过读取磁盘上的每个 segment(片段)的整个反向索引来构建的,将 term(词条)和 document(文档)关系反转,并将结果存储在内存中,在JVM的堆中.

 

5.4 text字段默认关闭Fielddat的原因?


text 字段默认关闭 Fielddata Fielddata会消耗很多堆空间,尤其是加载高基数的 text 字段的时候.一旦 fielddata 加载到堆中,它在 segment(片段)中的生命周期还是存在的.

此外,加载 fielddata 是一件非常昂贵的过程,会导致用户体验到延迟的感觉.这就是为什么 fielddata 默认关闭.

 

如果你尝试对文本字段上的脚本进行排序,访问值,你会看到此异常:

 

5.5 fielddata的打开方式?

Elasticsearch词频统计实现与原理解读-鸿蒙开发者社区

分类
收藏
回复
举报
回复
    相关推荐