如何实现搜索引擎优化(2022全球C++及系统软件技术大会|3月11-12日·上海点击了解详情(图))
优采云 发布时间: 2022-03-14 08:00如何实现搜索引擎优化(2022全球C++及系统软件技术大会|3月11-12日·上海点击了解详情(图))
2022全球C++与系统软件技术大会| 3月11-12日·上海点击了解详情》>>>
学习目标
1.了解为什么需要搜索引擎。
2.了解什么是搜索引擎技术以及它用来解决什么问题(场景)。知道何时使用它。
3.了解搜索引擎如何解决问题,熟悉搜索引擎的核心概念、工作流程和原理。
4.了解市面上常见的搜索引擎框架
理论研究课题 1:我们为什么需要搜索引擎?
问题 1:我们的应用程序通常使用什么来存储数据?
问题 2:我们经常浏览新闻、博客和商品。存储这些数据的表应该有哪些字段?
他们至少有以下字段
问题3:如何在数据库中进行查询?以新闻单为例
按类别搜索
按时间检查
按标题模糊搜索钓鱼岛相关新闻
按关键字搜索,如有关苍先生的新闻
问题4:当数据量变大时,四个查询都变慢。如何优化?
常用的数据库优化方法:
1.构建索引2.分区表
问题5:索引构建对于“查询钓鱼岛相关新闻”和“查询与苍老师相关的新闻”是否有效?
问题6:索引的原理是什么?
问题7:如何对索引进行排序?
1.数值栏2.时间栏3.文字栏
问题 8:在新闻标题列上建立索引。当我们查询title='钓鱼岛'时,数据库会怎么搜索呢?而当我们查询title LIKE '%Diaoyu Island%' 时,应该如何查询数据库呢?
问题9:如何判断一列是否可以在数据库中被索引?
基本原则:
表访问频繁,数据量大,每次查询的数据只占数据的一小部分
各列的数据值分布广泛
列收录大量空值
列常用于查询条件(不能收录在表达式中)
文本列需要特别注意:它们通常用于模糊查询,不适合索引。可以进行精确查询。
问题10:如果要对查询结果的相关性进行排名,数据库能做到吗?
例如:查询关于苍先生、tony、火锅的新闻:三个关键词(相关度最高)的新闻前面有两个关键词(相关度第二),第二个关键词一个收录一个关键字是的,下一个。如果要为搜索到的新闻字段设置不同的权重,例如新闻标题中收录这三个关键词的新闻的相关性远高于收录这三个词的新闻内容的相关性。数据库能做到吗?
理论研究
结构化数据:表和字段表示的数据
半结构化数据:xml html
非结构化数据:文本、文档、图像、音频、视频等
结论:数据库适合结构化数据的精确查询,但不适合半结构化和非结构化数据的模糊查询和灵活搜索(尤其是数据量大时),不能提供想要的真实数据。时间表现。
问题11:索引是否影响表增删改操作的效率?
那么为什么需要搜索引擎呢?
结论:数据库适合结构化数据的精确查询,但不适合半结构化和非结构化数据的模糊查询和灵活搜索(尤其是数据量大时),不能提供想要的真实数据。时间表现。
话题2:如何快速找到关于苍先生的消息?
分析:我们查询时,输入的是苍老师,我们想得到一个标题或内容中收录“苍老师”的新闻列表。
如果title和content栏有这样的索引,可以在里面快速找到苍老师关键词对应的文章id,然后根据 也是。
问题一:你认为这个索引的结构是什么?
问题2:为什么叫倒排索引?
英文原名Inverted index被翻译成倒排索引失败。而是应该翻译成:反向索引
问题3:以下两个索引可以合并在一起吗?
问题4:反向索引的记录数会不会很大?
如果是英文,最大是多少?如果是中文,最大可能是多少?
结论:金额不会很大,小于30万;通过这个索引找到文章会非常快。
问题5:如何建立这样的索引?
数据示例
新闻编号:1
新闻标题:托尼和苍老师一起吃火锅
新闻内容:2018年4月1日,Tony在四川成都出席某活动时,恰巧主办方还邀请了苍老师为他增加人气。应主办方的邀请,他与苍老师共进了火锅。酷!
如何为上述新闻创建反向索引文章?
如何将一个句子分成多个单词?人类可以分裂,但计算机可以分裂?
如果是英文文章,好不好?找到与您的查询匹配的 10 个最佳文档是一回事
英文很好(有空格),但中文不好。但是一定要得分,否则无法建立反向索引。
您必须编写一个特殊的程序来执行此操作:tokenizer
问题 6:分词器和自然语言有什么关系?
每种语言都有对应的分词器
问题7:如果你想开发一个中文分词器,你认为它可以如何用于分词?
例句:张三说的很有道理。
分析
机器不会分裂,但我们会。
问题 1:我们是如何分裂的?
从头一个一个读,通过前后单词的组合,分离出来:张三、说,真的,有道理
问题2:我们如何确定张三、所说的确实是一个词?
因为我们的大脑里有一个单词字典,是通过与字典匹配来确定的。
问题3:为什么不区分:张三、说的是真的,是真的,是真的,是合理的?
因为我们的大脑可以进行歧义分析。
中文分词器原理:有一个词的词典,将句子前后的词组合,与词典匹配,歧义分析
问题8:Java开源中文分词器有哪些?
百度:中文分词器
有很多,如何选择?
准确度、分词效率、支持中英文混合分词
常用的中文分词器
IKAnalyzer mmseg4j
专业的商业分词器,在字典匹配的基础上加入统计、机器学习和人工标注。它可以很好地处理歧义和未注册的单词,并且分词速度较慢。百度、谷歌
问题9:分词时分词器能否统计单词的出现次数和位置?
这两个数字是干什么用的?
问题10:你、我、他、the、地、标点符号等需要索引吗?
这些词被称为:停用词。 Tokenizer 支持指定/添加停用词
问题11:出现生词怎么办?
分词器应该支持向其字典中添加新词。
根据分词结果,我们创建倒排索引如下:
结论:使用分词器对数据进行切分,创建倒排索引。
话题三:反向索引,如何搜索?
搜索“托尼OR苍先生”相关新闻的步骤是什么?
第 1 步:对搜索输入进行标记
托尼,苍先生
第 2 步:查找 文章列表
在反向索引中收录托尼和苍先生
第三步:合并两个列表,对输出进行排序
{1,12,8,5}
问题一:合并后的列表应该如何排序?
我们想要最相关的优先
问题 2:如何衡量相关性?
问题 1:我们如何确定相关性?
收录您要查找的单词
问题2:如何判断更相关?
人类可以通过阅读内容来确定相关性,机器无法理解人类的话。
您需要建立一个可以评估相关性的模型。
我们之前在分词器中计算的单词出现的次数可以用来构建这个模型吗?评判的规则是什么?
主题 4:如何构建相关性评估模型?
使用出现次数构建模型
规则一:统计出现次数,按照出现次数从高到低排列
{{1,5},{5,3},{12,1},{8,1}}
问题一:苍先生出现在标题中,苍先生出现在新闻内容中。哪一个与苍先生的关系更大?如何
规则2:添加权重,标题权重10,内容权重1,计算权重分数,按高低排序
{{1,23},{12,10},{5,3},{8,1}}
这个相关模型很简单。有时排序不是很准确。
复杂的相关性计算模型包括:
tf-idf词频-逆文档率模型
向量空间模型
贝叶斯概率模型,如:BM25
搜索引擎将提供一种或多种选择实现以及扩展。电子商务中的搜索相关性计算网站会考虑越来越复杂。
主题5:反向索引更新:更新数据时是否必须更新索引?好更新?
更新分析:
Q1:添加时如何更新?
Q2:删除后如何更新?
问题3:修改时需要如何更新?
思考一:什么时候可以实时更新,什么时候不能实时更新?什么情况下必须做?
思考2:搜索引擎巨头百度和谷歌,他们的网络搜索反向索引是更新还是重建?
问题6:倒排索引是存储在内存中,还是放在磁盘上合适?
倒排索引会有多大?
主题 7:搜索引擎需要支持精确搜索吗?需要像数据库一样支持多条件 AND OR 组合搜索?
作为类 IN() 值 >=
总结
1、什么是搜索引擎?
一套专门用于实时搜索大量结构化、半结构化和非结构化文本数据的软件
它最早用于信息检索领域,并通过谷歌、百度等公司推出的网络搜索而广为人知。后来被各大电商公司网站采用来搜索产品网站。现在被广泛应用于各个行业和互联网应用。这是大型系统架构师和网站的必备技能。
2、搜索引擎用来解决什么问题?
专门解决大量结构化、半结构化和非结构化文本数据的实时检索问题。这种实时搜索数据库做不到。
3、搜索引擎适合哪些场景?
实时搜索大量结构化、半结构化和非结构化文本数据
信息检索(如电子图书馆、电子档案)
网页搜索
内容提供网站内容搜索(例如新闻、论坛、博客网站)
电商商品搜索网站
如果你负责的系统中数据量很大,通过数据库检索很慢,可以考虑使用搜索引擎专门负责检索。
4、搜索引擎的核心组件是什么?
数据来源
分词器
倒排索引(Inverted Index)
相关性计算模型
5、搜索引擎是如何工作的?
1、从数据源加载数据,分词,构建反向索引
2、搜索时,对搜索输入进行分段,找到反向索引
3、计算相关性、排序、输出
6、实现一个搜索引擎需要实现什么?
1、分词器
2、反向索引,索引存储
3、相关性计算模型
7、要使用搜索引擎,您需要了解什么?
1、分词器
2、反向索引创建、存储、更新
3、相关性计算模型
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的情况下也能轻松方便地使用搜索平台。
问:如何选择搜索引擎组件或系统?
看成熟度和使用企业量。