搜索引擎核心理论
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
搜索引擎核⼼理论
学习⽬标:
1. 明⽩为什么需要搜索引擎。
2. 明⽩搜索引擎技术是什么、⽤来解决什么问题(场景)的。
明⽩什么时候该⽤它。
3. 明⽩搜索引擎是怎么解决问题的,熟悉搜索引擎的核⼼概念、⼯作流程、原理。
4. 了解市⾯上常⽤的搜索引擎框架
在数据库中如何判断⼀个列是否可以建索引?
基本原则:
表经常被访问,且数据量很⼤,⽽每次查询的数据只占很⼩很⼩⼀部分
列的数据值分布范围⼴泛
列中包含⼤量空值
列被经常⽤在查询条件中(不能是包含在表达式中)
⽂本列需特殊考虑:经常是⽤作模糊查询,则不适合建索引。
精确查询则可。
为什么需要搜索引擎?
数据的种类:
结构化数据:⽤表、字段表⽰的数据
半结构化数据: xml html
⾮结构化数据:⽂本、⽂档、图⽚、⾳频、视频等
结论:数据库适合结构化数据的精确查询,⽽不适合半结构化、⾮结构化数据的模糊查询及灵活搜索(特别是数据量⼤时),⽆法提供想要的实时性。
为什么称为倒排索引?
英⽂原名Inverted index,失败地被翻译成了倒排索引。
⽽应该翻译为:反向索引
复杂的相关性计算模型有:
tf-idf 词频-逆⽂档率模型
向量空间模型
贝叶斯概率模型,如: BM25
搜索引擎中会提供⼀种、或多种实现供选择使⽤,也会提供扩展。
电商⽹站中的搜索相关性计算会考虑更多,更复杂。
总结
1、搜索引擎是什么?
⼀套可对⼤量结构化、半结构化数据、⾮结构化⽂本类数据进⾏实时搜索的专门软件
最早应⽤于信息检索领域,经⾕歌、百度等公司推出⽹页搜索⽽为⼤众⼴知。
后⼜被各⼤电商⽹站采⽤来做⽹站的商品搜索。
现⼴泛应⽤于各⾏业、互联⽹应⽤。
是⼤型系统、⽹站架构师必备技能。
2、搜索引擎是⽤来解决什么问题的?
专门解决⼤量结构化、半结构化数据、⾮结构化⽂本类数据的实时检索问题。
这种实时搜索数据库做不了。
3、搜索引擎适合什么场景使⽤?
⼤量结构化、半结构化、⾮结构化⽂本类数据的实时搜索
信息检索(如电⼦图书馆、电⼦档案馆)
⽹页搜索
内容提供⽹站的内容搜索(如新闻、论坛、博客⽹站)
电⼦商务⽹站的商品搜索
如果你负责的系统数据量⼤,通过数据库检索慢,可以考虑⽤搜索引擎来专门负责检索。
4、搜索引擎由哪些核⼼部件构成?
数据源
分词器
反向索引(倒排索引)
相关性计算模型
5、搜索引擎的⼯作原理是怎样的?
从数据源加载数据,分词、建⽴反向索引
搜索时,对搜索输⼊进⾏分词,查找反向索引
计算相关性,排序,输出
6、要实现⼀个搜索引擎,需要实现哪些?
分词器
反向索引,索引存储
相关性计算模型
7、要去使⽤⼀个搜索引擎,需要搞清楚它的哪些⽅⾯?
分词器
反向索引建⽴、存储、更新
相关性计算模型
8、java领域应⽤⼴泛的开源搜索引擎组件、系统
Lucene:Apache顶级开源项⽬,Lucene-core是⼀个开放源代码的全⽂检索引擎⼯具包,但它不是⼀个完整的全⽂检索引擎,⽽是⼀个全⽂检索引擎的框架,提供了完整的查询引擎和索引引擎,部分⽂本分词引擎(英⽂与德⽂两种西⽅语⾔)。
Lucene的⽬的是为软件开发⼈员提供⼀个简单易⽤的⼯具包,以⽅便的在⽬标系统中实现全⽂检索的功能,或者是以此为基础建⽴起完整的全⽂检索引擎。
Nutch:Apache顶级开源项⽬,包含⽹络爬⾍和搜索引擎(基于lucene)的系统(同百度、google)。
Hadoop因它⽽⽣。
Solr:Lucene下的⼦项⽬,基于Lucene构建的独⽴的企业级开源搜索平台,⼀个服务。
它提供了基于xml/JSON/http的api供外界访问,还有web管理界⾯。
Elasticsearch:基于Lucene的企业级分布式搜索平台,它对外提供restful-web接⼝,让程序员可以轻松、⽅便使⽤搜索平台,⽽不需要了解Lucene。