Elasticsearch 搜索与聚合在数据存储结构方面的理解

1、说说 Elasticsearch 的搜索与聚合在数据存储结构方面的理解。

1)Elasticsearch 在搜索时,采用的是倒排索引(也称反向索引)。即将文档的所有内容通过分析、过滤、转化等操作抽取关键字,然后建立一个按字符顺序排列的关键字列表。

假设有两篇文章:

文章1的内容是: Tom lives in Guangzhou, I live in Guangzhou too.

文章2的内容是: He once lived in Shanghai.

文章内容经过 Elasticsearch 的分析器处理后,得到如下的关键词:

文章1的关键词是: tom live guangzhou i live guagnzhou

文章2的关键词是: he live shanghai

得到上述文章的关键字之后,可以构造出如下的索引表

term 文章1 文章2
guangzhou *
he *
i *
live * *
shanghai *
tom *

当然,仅仅知道关键词出现在那些文章还是不够的,我们希望还能够得到文章的关键词出现的次数和出现频率。而 lucene 中采用的索引结构类似为:

term 文章号[出现频率] 出现位
guangzhou 1[2] 3、6
he 2[1] 1
i 1[1] 4
live 1[2]、2[1] 2、5、2
shanghai 2[1] 3
tom 1[1] 1

我们以 live 这样说明该结构。live 在文章1中出现了2次,文章2中出现了一次。它的出现位置为 2、5、2 代表的含义需要结合文章号和出现频率来分析。文章1中出现了2次,那么 2、5 就表示 live 在文章1中出现的两个位置,文章2中出现了一次,剩下的 2 就表示 live 是文章 2 中第 2 个关键字。

上述的关键字是按字符排序排列的,因此 lucene 可以用二元搜索算法快速定位关键词。实现时 lucene 将上面表格的三列分别作为词典文件、频率文件、位置文件保存。此种词典文件不仅保留关键词,还保留了指向频率文件和位置文件的指针。

假设要查询单词 live ,lucene 先对词典二元查找,找到改词后,通过指向频率文件的指针读取所有文章号。因此词典文件本身特别小,因而整个过程是毫秒级的。

相比如普通的顺序匹配,对文章内容进行字符串匹配,lucene 的倒排索引是相当快速的。

2)上面分析完 Elasticsearch 在搜索时采用的倒排索引,下面说一下 Elasticsearch 的聚合分析。聚合分析和搜索还是有很大的不同,典型的应用场景,比如计算文章1中每个关键词出现的次数,反向索引就略显无力。首先需要扫描整个词典文件,才能找到该文档包含的所有关键词,然后在进行聚合统计。在数据量大的情况下,扫描整个方向索引,性能肯定要受不小影响。

Elasticsearch 为聚合计算引入名为 fielddata 的数据结构,即采用我们平时常见正向索引,即文档到关键词的映射。类似于下表:

文章号 guangzhou he i live shanghai tom
文章1 * * * *
文章2 * * *

对文章在进行聚合计算时,就只要根据文章 ID 查找就好。因为聚合计算也好,排序也好,通常是针对某些列,实际上 Elasticsearch 为了做聚合分析,生成的是文档到 field 的多个列式索引(至于什么是列式索引,后面做详细介绍)。在做聚合就分析,fielddata(类似上表) 是保存在内存中,这么做会有内存不够用的风险,而且内存是从 JVM (java 虚拟机)上分配的,JVM 对大内存的垃圾收集有一定不稳性。当数据量大时,内存不够是正常的,同时,也不可能一次性所有字段都加载,如果未命中搜索,还需要在内存中建立 fielddata ,这都影响响应时间。

为了解决 fielddata 的内存有限和 JVM 对大内存的垃圾回收导致的不稳定问题,Elasticsearch 引入如 DocValue。DocValue 也是和 fielddata 类似的结构。不同的是,DocValue 是持久存取在文件中。由于这消耗了额外的存储空间,但对于 JVM 的内存需求降低,多余的内存留给操作系统的文件缓存使用。加上DocValue 是预先构建的,查询时剩去了不命中是构建 fielddata 的时间。DocValue 比内存慢10%~25%,但是稳定性大幅提升。

3)何为列式存储?

看下图:


20141115094556515.png

从上图的内存结构可以看出,行式存储下,一张表的数据时放在一起的,但是列式存储则是分开保存。优缺点如下:


image2016-9-23 11_15_43.png

相关参考网址:

http://blog.csdn.net/dc_726/article/details/41143175 (几张图看懂列式存储)

https://yq.aliyun.com/articles/6902?do=login (Elasticsearch 中的 DocValue)

https://my.oschina.net/wangfree/blog/77045 (倒排索引)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容

  • Elasticsearch聚合限制内存使用 限制内存使用 通常为了让聚合(或者任何需要访问字段值的请求)能够快点,...
    meng_philip123阅读 4,317评论 2 7
  • 欢迎访问我的博客查看原文:http://wangnan.tech 注:文本整理自《ELKstack权威指南》 目录...
    GhostStories阅读 10,394评论 0 7
  • Solr&ElasticSearch原理及应用 一、综述 搜索 http://baike.baidu.com/it...
    楼外楼V阅读 7,274评论 1 17
  • 我俩躲在一辆白色SUV后面,避风。 风很大,起初以为是要下雨,可也只是象征性的滴了几滴,等烧烤店的老板把遮雨棚架好...
    申由己阅读 583评论 0 50
  • 在高考成绩下来的那一刻,我便决定了复读这一条路。心中有说不出的酸涩,但我明白,这一切都是我不懂事,不认真学习的结果...
    元润润阅读 186评论 1 1