索引文件浅析

来源:互联网 发布:金融数据挖掘python 编辑:程序博客网 时间:2024/06/06 04:05

目标:通过阅读本文能知道像Google、百度这样的搜索引擎能在毫秒级在海量数据中查找、返回搜素关键词的原理。本文通过和传统数据库的对比引出倒排索引的概念和结构。为进一步了解搜索引擎打下一个基础。

引言:数据库查找和搜索引擎查找的区别

让我们从熟悉的数据库,例如MySQL开始。下面这张表是常见的Mysql表,存放着一些电视剧的信息。

title

description

starringName

tag

诛仙青云志

草庙村少年张小凡(李易峰饰),在经历全村尽灭的惨案后,被青云门收归门……

李易峰,赵丽颖,杨紫,成毅,

古装,武侠,玄幻,诛仙,青云志

,TFboys,李易峰,赵丽颖

笑傲江湖第三季

《笑傲江湖》第三季爆...

郭德纲,冯小刚,宋丹丹,百克力...

笑傲江湖,笑傲江湖第三季,笑傲江湖2016,笑傲江湖东方卫视

疯狂动物城

故事发生在一个所有哺...

金妮弗·古德温,杰森·贝特曼,伊德里斯·艾尔巴,珍妮·斯蕾特,,邦尼·亨特,,,J·K·西蒙斯,奥克塔维亚 ·斯宾瑟 , 艾伦 ·图代克

,Shakira...

疯狂动物城,金妮弗·古德温,杰森·贝特曼,,拜伦·霍华德,瑞奇·摩尔

太行山上央视版

全剧始终贯穿着军民团...

唐国强,刘劲,郭连文,王伍福,姚居德,,,李晓枫...

内地剧,战争,军事,年代,农村,太行山上

荒原第一季

数世纪后,人类重回封...

吴彦祖,,莎拉·伯格,,马尔顿·索克斯,,,,史蒂芬·朗,...

荒原,美版西游记,动作,冒险,吴彦祖,荒芜之地

睡在我上铺的兄弟

沪都大学330宿舍的...

陈晓,秦岚,,,李现,王啸坤,余心恬

,蓝盈莹,蒋雪鸣...

睡在我上铺的兄弟,,张琦,陈晓, 秦岚

倒霉爱神

性感可人的曼哈顿女孩...

琳赛·洛翰,克里斯·派恩,费松·拉夫,萨米拉·阿姆斯特朗,米西·派勒,布丽·特纳,克里斯·卡马克

,Jonah,Falco...

其它

这样DBA可以通过组合关键词找到观众想看的某一部电视剧了。


 

和SQL语句比起来,我们大概可以将涉及的字段区分成:

摘要字段:用来展现结果的字段。

倒排索引字段:用来过滤筛选条件的字段。

正排字段:用来对结果排序的字段。

问:好好地数据库字段,为什么要拆分成这些?

答:因为搜索引擎不是存储引擎。Mysql为了保证数据完整性存储尽可能多的字段属性,但这些字段大部分都跟搜索没有关系。为了提高速度,搜索引擎会舍弃大部分不用的字段。同时根据字段的用途不同有不同的处理。

举例而言:对于倒排索引字段,因为涉及用户体验问题要求快速找到数据集,所以一般会全部放入主内存中。

对于正排字段,涉及到将用户关注的内容放到前面,因此会尽可能放入内存。

对于展现字段,则各自有各自的处理。有可能会放在硬盘,甚至有可能会放到其它机器上。

 

 

数据库查找 .:

1,效率太低。 尽管《数据库原理》老师说可以对字段建索引,但千万级记录条件查询仍需要3~4分钟甚至更久

2,不够智能,对查询要求高。 例如“猪仙青云志”就找不到了。“我的老丈人会工夫”也找不到热播电视剧《我的岳父会武术》

3,排序结果不够理想:很多时候要在上百条结果中翻页,或者做二次处理。

 

对比一下搜索引擎:

1, 高效率:千万级记录条件查询可以在毫秒级返回结果

2, 可以有智能纠错,可以进行拼音查找、笔画查找、前缀查找等

3, 80%以上概率前三条即为用户想要的查询结果。

 

 

初识索引:索引的结构

z`

docId

title

description

starringName

tag

123

诛仙青云志

草庙村少年张小凡(李易峰饰),在经历全村尽灭的惨案后,被青云门收归门……

李易峰,赵丽颖,杨紫,成毅,

古装,武侠,玄幻,诛仙,青云志,TFboys,李易峰, 赵丽颖

30778

笑傲江湖第三季

《笑傲江湖》第三季爆...

郭德纲,冯小刚,宋丹丹,百克力...

笑傲江湖,笑傲江湖第三季,笑傲江湖2016,笑傲江湖东方卫视

 

索引结构说明:

l  从index开始,和数据库类似分字段,查找时需要有字段信息。

举例:在演员中查找“周星驰”和在导演中查找 “周星驰”,结果是不一样的。所以需要区分“导演”字段和“演员”字段。

l  每个字段下面有一系列的词。

l  每个词后面跟着一长串的列表,列表上有id,还有一些辅助信息。

 

举例查找一下-à    title:青云志

1,从index根节点开始,找到title的那一条链。

2,在链中查找“青云志”。可以得到123, 789, 1024, 2048 四个文档。

如果查找   title:青云志 + starringName:李易峰呢?

         那就将刚才的四个文档,和李易峰的123文档做交集,得到123 。也就是123是搜索结果

 

排序:

         通过123ID可以到正排字段里找到它的辅助信息。和预期的可能不太一样的,它记录的内容是“token: 青云志  pos: 1 offset: 6  ”表示“青云志”在“诛仙”后面---》也就是第2个词,第6个位置(下标从0开始,以UTF8编码。一个汉字是三个字节。)

         通过这些辅助信息可以对结果进行进一步的排序。

 

摘要展现字段:

         可以通过123再到另一个地方获取诛仙青云志的展现信息。例如可以将它放到memcached中,通过123ID获取它。

 

索引创建过程:

索引创建过程中,有两个很重要的过程是“分词”和“归一化”。

分词能将“诛仙青云志”变成“诛仙”“青云志”

中文的归一化则是将很多同义词变成一个标准词,例如将老丈人变成岳父,将功夫变成武术。

通过这种转换,就可以将“我的老丈人会功夫”变成“我的岳父会武术。”

 

0 0
原创粉丝点击