索引文件浅析
来源:互联网 发布:金融数据挖掘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获取它。
索引创建过程:
索引创建过程中,有两个很重要的过程是“分词”和“归一化”。
分词能将“诛仙青云志”变成“诛仙”“青云志”
中文的归一化则是将很多同义词变成一个标准词,例如将老丈人变成岳父,将功夫变成武术。
通过这种转换,就可以将“我的老丈人会功夫”变成“我的岳父会武术。”
- 索引文件浅析
- MySQL 索引浅析
- mysql索引浅析
- MySQL 索引浅析
- hive索引浅析
- MySQL索引浅析
- 浅析MySQL索引
- 浅析MySQL各种索引
- 浅析MySQL各种索引
- 浅析MySQL索引
- 浅析数据库索引
- 数据库之索引浅析
- 数据库索引浅析
- 降序索引浅析
- 位图索引浅析
- 浅析MySQL数据库索引
- 浅析聚集索引
- dump浅析B树索引
- 8天学通MongoDB——第一天 基础入门
- (c++)输入两个正整数m和n,求其最大公约数和最小公倍数。
- JSPatch简介 – 动态更新iOS APP
- Java NIO示例:多人网络聊天室
- get_hash_entry
- 索引文件浅析
- OpenSSL 与 SSL 数字证书概念贴
- Vue.js教程6-列表渲染
- Android-EditText只能输入不能删除的问题
- POJ 2362 Square
- 后缀数组(重复次数最多的连续重复子串)
- php读取csv文件,在linux上出现中文读取不到的情况 解决方法
- Cube Sphere (国外技术文章收藏)
- ZOJ3623: Battle Ships(类完全背包)