搜索引擎核心理论
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
步骤3: 合并两个列表,排序输出
{1,12,8,5} 问题1:合并后列表该如何排序? 我们希望最相关的排在最前面
33
理论学习
问题2: 相关性如何度量? 问1:我们是如何确定相关的? 包含要找的词
问2:如何确定更相关?
人可以通过读内容判定相关性,机器不懂人话。 得建立一套能评估相关性的模型。 我们前面在分词器中统计出的词的出现次数,可以用来建立这个 模型吗? 评判的规则怎么定?
问题6:分词器与自然语言的关系是怎样?
每门语言有对应的分词器
25
理论学习
问题7:如果要开发一个中文分词器,你觉得该怎么实现对一句话进行分词? 语句示例:张三说的确实在理。 分析 机器不会分,而我们人会分。 问1:我们人是怎么分的? 从头开始一个一个字读,通过前后字的组合,分出:张三、说的、 确实、在理 问2:我们是怎么确定张三、说的、确实是词?
新?好更新吗?
38
理论学习
更新情况分析: 问1:新增时,需要怎么更新?
问2:删除时,需要怎么更新?
问3:修改时,需要怎么更新?
39
理论学习
思考1:实时更新在什么情况下可做,什么情况下不可做?什么情况下必 须得做?
思考2:搜索引擎巨头百度、谷歌,它们的网页搜索的反向索引是更新还是 重建?
40
理论学习
6
理论学习
它们至少有下面这些字段
7
理论学习
问题3:在数据库中如何做查询?以新闻表为例 按类别查
按时间查
按标题模糊查询,查询标题与钓鱼岛有关的新闻 按关键字查询 ,如查询与苍老师有关的新闻
8
理论学习
问题3:在数据库中如何做查询?以新闻表为例 按类别查
SELECT * FROM 新闻表 WHERE 类别 IN (…); 按时间查
问题8:在新闻标题列上建索引,当我们查询 标题 = ‘钓鱼岛’,数据库会怎么 去查? 而当我们查询 标题 LIKE ‘%钓鱼岛%’ ,数据库该如何去查?
13
理论学习
问题9:在数据库中如何判断一个列是否可以建索引? 基本原则: 表经常被访问,且数据量很大,而每次查询的数据只占很小很小一部分 列的数据值分布范围广泛 列中包含大量空值 列被经常用在查询条件中(不能是包含在表达式中) 文本列需特殊考虑:经常是用作模糊查询,则不适合建索引。精确查询则可。
OR 内容 LIKE ‘%苍老师%’;
10
理论学习
常用的数据库优化方法: 建索引
分区表
问题5:建索引对 “查询标题与钓鱼岛有关的新闻” 和 “查询与苍老师有关 的新闻” 有效果吗?
为什么?
11
理论学习
问题6:索引的原理是怎样的?
问题7:索引的排序,是怎么排的?
数值列
时间列 文本列
12
理论学习
24
理论学习
问题5:如何建立这样一个索引?
如果是英文文章,好不好分?
It’s one thing to find the 10 best documents to match your query 英文好分(有空格),中文则不好分。 但一定得要分,否则无法建立反向索引。
就必须写一套专门的程序来做这个事情:分词器
标题列索引
词 tony 苍 火锅 老师 标题包含该词的文章id {1,2} {1,9} {1,8,9} {1,9} 词到文章id的索引
内容列索引
词 tony 苍 火锅 老师 内容包含该词的文章id {1,2,5,6,8} {1,3,9,11} {1,2,8,9} {1,9}
这就是:倒排索引
20
理论学习
15
理论学习
结构化数据:
用表、字段表示的数据
半结构化数据: xml html 非结构化数据: 文本、文档、图片、音频、视频等
结论:数据库适合结构化数据的精确查询,而不适合半结构化、非 结构化数据的模糊查询及灵活搜索(特别是数据量大时),无法提 供想要的实时性。
16
理论学习
问题11:建索引对表的增、删、改操作有效率影响没?
17
理论学习
议题1:为什么需要搜索引擎? 结论:数据库适合结构化数据的精确查询,而不适合半结构化、非
结构化数据的模糊查询及灵活搜索(特别是数据量大时),无法提 供想要的实时性。
18
理论学习
议题2:如何做才能快速查询到与苍老师有关的新闻?
19
理论学习
分析:我们查询时,输入的是苍老师,想要得到标题或内容中包含“苍老师” 的新闻列表。 如果标题、内容列上都有一个这样的索引,里面能快速找到与苍老师 关键字对应的文章id,再根据文章id就可以快速找到文章了。 问题1:你觉得这个索引的结构是怎样的?
文章 词
倒排索引无特别
21
理论学习
问题3:下面这两个索引可以合并在一起吗? 标题列索引 词 tony 苍 火锅 老师 词 tony 苍 火锅 老师 标题包含该词的文章id {1,2} {1,9} {1,8,9} {1,9} 标题包含该词的文章id {1,2} {1,9} {1,8,9} {1,9} 思考:有什么好处没?
{{1,5},{5,3},{12,1},{8,1}}
问题1:标题中出现苍老师,与新闻的内容中出现苍老师,哪个是专门写苍老 师的相关度高些?怎么做 规则2: 加入权重,标题权重10,内容权重1,计算权重得分,按高-低排序 {{1,23},{12,10},{5,3},{8,1}} 这个相关性模型很简单。有时排序会不很准确。
议题6:反向索引是存储在内存中,还是磁盘中合适?
反向索引会有多大?
41
理论学习
议题7:搜索引擎需要支持精确搜索吗?需要支持像数据库
OR 内容 LIKE ‘%苍老师%’;
9
理论学习
问题4:当数据量变大时,这四个查询都变慢了,该如何优化? 按类别查
SELECT * FROM 新闻表 WHERE 类别 IN (…); 按时间查
SELECT * FROM 新闻表 WHERE 发表时间 BETWEEN xxx AND xxx; 按标题模糊查询,查询标题与钓鱼岛有关的新闻 SELECT * FROM 新闻表 WHERE 标题 LIKE ‘%钓鱼岛%’; 按关键字查询 ,如查询与苍老师有关的新闻 SELECT * FROM 新闻表 WHERE 标题 LIKE ‘%苍老师%’
专业的商用分词器,在词典匹配的基础上加入统计以及机器学习、人工标注。 能很好处理歧义和未登录词问题,分词速度慢些。 百度、谷歌
27
理论学习
问题9: 分词器在分词时能不能统计出词的出现次数、位置?
这两个数值有什么用?
28
理论学习
问题10: 你、我、他、的、地、了、标点符号…..这些需要为其创建索引吗?
32
理论学习
步骤1: 对搜索输入进行分词 tony 、苍老师 步骤2: 在反向索引中找出包含tony、苍老师的文章列表 tony 苍老师 {{1,1,{0}},{12,1,{5}}} {{1,1,{6}}} {{1,1,{11},{8,1,{90}}} {{1,2,{21,32}},{5,3,{18,29,45}}}
14
理论学习
问题10:如果要对查询出来的结果进行相关度排名,数据库能否做到? 如:要查询 苍老师、tony、火锅有关的新闻: 含有三个关键字(相关度最高)的新闻排前面 含两个关键字(相关度次之),排次之
含一个关键字 的,排次次之。
如果要对搜索的新闻字段设置不同的权重,比如新闻标题中包含这三个关键 字的新闻的相关性就远高于新闻内容中包含这三个字。数据库能否做到?
36
理论学习
复杂的相关性计算模型有: tf-idf 词频-逆文档率模型 向量空间模型 贝叶斯概率模型,如: BM25 搜索引擎中会提供一种、或多种实现供选择使用,也会提供扩展。
电商网站中的搜索相关性计算会考虑更多,更复杂。
37
理论学习
议题5:反向索引更新:数据更新时,索引是不是必须得更
搜索引擎核心理论
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
目录
1 2 3
学习目标 理论学习 总结
2
学习目标
学完本课题,你应达成如下目标:
1. 明白为什么需要搜索引擎。 2. 明白搜索引擎技术是什么、用来解决什么问题(场景)的。明白什么时候 该用它。
SELECT * FROM 新闻表 WHERE 发表时间 BETWEEN xxx AND xxx; 按标题模糊查询,查询标题与钓鱼岛有关的新闻 SELECT * FROM 新闻表 WHERE 标题 LIKE ‘%钓鱼岛%’; 按关键字查询 ,如查询与苍老师有关的新闻 SELECT * FROM 新闻表 WHERE 标题 LIKE ‘%苍老师%’
这些词称为:停用词。分词器支持指定/添加停用词
问题11: 当出现了新词了,该怎么办? 撩妹 老司机、软妹子、直男、腿玩年、苍老师
分词器应支持为其词典添加新词。
29
理论学习
根据分词结果,我们创建反向索引,如下所示: 词 tony 苍老师 火锅 四川 标题包含该词的文章id 内容包含该词的文章id {{1,1,{0}},{12,1,{5}}} {{1,1,{11},{8,1,{90}}} {{1,1,{6}}} {{1,2,{21,32}},{5,3,{18,29,45}}} {{1,1,{12}}} {1,1,{40}}} {{1,1,{6}}}
问题2:为什么称为倒排索引? 英文原名Inverted index,失败地被翻译成了倒排索引。 而应该翻译为:反向索引 查询一篇文章包含哪些关键词,需要怎样的索引? 文章id 1 2 包含的关键词 {tony,苍,火锅,老师} {火锅,四川} 词文章
查询哪些文章包含某关键词,需要怎样的索引? 词 tony 苍 火锅 老师 包含该词的文章id {1,2} {1,9} {1,8,9} {1,9}
34
理论学习
议题4:如何建立一个相关性评估模型?
利用出现次数来建立模型
35
理论学习
规则1: 统计出现次数,根据次数从高到低排 tony 苍老ቤተ መጻሕፍቲ ባይዱ {{1,1,{0}},{12,1,{5}}} {{1,1,{6}}} {{1,1,{11},{8,1,{90}}} {{1,2,{21,32}},{5,3,{18,29,45}}}
文章id
出现次数
{{1,2,{21,32}},{5,3,{18,29,45 }}}
出现位置:字符索引号
30
理论学习
议题2:如何做才能快速查询到与苍老师有关的新闻?
结论:使用分词器对数据进行分词,创建反向索引。
31
理论学习
议题3:有了反向索引了,如何进行搜索?
如想搜索与 “tony OR 苍老师” 相关的新闻 步骤是怎样的?
3. 明白搜索引擎是怎么解决问题的,熟悉搜索引擎的核心概念、工作流程、
原理。 4. 了解市面上常用的搜索引擎框架
3
目录
1 2 3
学习目标 理论学习 总结
4
理论学习
议题1:为什么需要搜索引擎?
5
理论学习
问题1:我们的应用中一般用什么来存储数据?
问题2:我们经常浏览新闻、博客、商品,存储这些数据的表都应有哪些字段?
结论:量不会很大,30万以内;通过这个索引找文章会很快。
23
理论学习
问题5:如何建立这样一个索引? 数据示例 新闻id:1 新闻标题:Tony 与苍老师一起吃火锅 新闻内容:2018年4月1日,Tony 在四川成都出席某活动时,碰巧主办方也 邀请了苍老师来提高人气,在主办方的邀请下和苍老师一起吃了个火锅,很 爽! 怎样为上面的新闻文章建立反向索引? 一句话怎么分成多个词?人能分,计算机能不能分?
22
内容列索引 词 tony 苍 火锅 老师 内容包含该词的文章id {1,2,5,6,8} {1,3,9,11} {1,2,8,9} {1,9}
内容包含该词的文章id {1,2,5,6,8} {1,3,9,11} {1,2,8,9} {1,9}
理论学习
问题4:反向索引的记录数会不会很大? 如果是英文的,最大是多少? 如果是中文的,最大可能是多少?
因为我们的大脑里有个词的字典,通过与字典匹配,而确定。
问3:为什么我们不会分出:张三、说的、的确、确实、实在、在理? 因为我们的大脑可以进行歧义分析。
中文分词器原理:有个词的字典,对语句前后字进行组合,与字典匹配,歧义 分析
26
理论学习
问题8: java开源中文分词器有哪些? 请大家百度:中文分词器 有很多,如何选择? 准确率 分词效率 中英文混合分词支持 常用中文分词器 IKAnalyzer mmseg4j