如何实现搜索引擎优化(如何判断一个列是否可以建索引问题(场景))
优采云 发布时间: 2021-10-30 23:12如何实现搜索引擎优化(如何判断一个列是否可以建索引问题(场景))
学习目标
1.了解为什么需要搜索引擎。
2.了解什么是搜索引擎技术,它用来解决什么问题(场景)。知道何时使用它。
3.了解搜索引擎如何解决问题,熟悉搜索引擎的核心概念、工作流程和原理。
4.了解市面上常用的搜索引擎框架
理论学习课题1:为什么需要搜索引擎?
问题 1:我们的应用程序中通常使用什么来存储数据?
问题2:我们经常浏览新闻、博客和产品。存储这些数据的表应该有哪些字段?
他们至少有以下字段
问题三:如何在数据库中查询?以新闻表为例
按类别搜索
按时间检查
按标题模糊查询,查询标题和钓鱼岛新闻
通过关键词搜索,比如搜索与仓先生相关的新闻
问题4:当数据量变大时,这四个查询都变慢了。如何优化?
常用的数据库优化方法:
1.建立索引2.分区表
问题5:索引对“搜索钓鱼岛标题新闻”和“搜索苍老师新闻”有效吗?
问题6:索引的原理是什么?
问题7:索引是如何排序的?
1.数值栏2.时间栏3.文字栏
问题 8:在新闻标题栏上建立索引。当我们查询title='钓鱼岛'时,数据库会如何查找?而当我们查询标题LIKE'%Diaoyu Islands%'时,应该如何查询数据库?
问题9:如何判断一列是否可以在数据库中建立索引?
基本原理:
表访问频繁,数据量大,每次查询的数据只占很小的一部分
列的数据值分布广泛
该列收录很多空值
列常用于查询条件(不能收录在表达式中)
文本列需要特别考虑:它们常用于模糊查询,不适合索引。准确查询没问题。
问题10:如果要对查询结果的相关性进行排序,数据库能做到吗?
例如,如果要查询苍老师、tony、火锅新闻:收录三个关键词(相关度最高)的新闻行收录两个关键词(相关度第二),下一行收录一个关键词,第二。如果要为搜索到的新闻字段设置不同的权重,例如,新闻标题中收录这三个关键字的新闻的相关性远高于收录这三个词的新闻内容的相关性。数据库可以吗?
理论研究
结构化数据:由表和字段表示的数据
半结构化数据:xml html
非结构化数据:文本、文档、图片、音频、视频等。
结论:该数据库适用于结构化数据的精确查询,但不适用于半结构化和非结构化数据的模糊查询和灵活搜索(尤其是数据量较大时),不能提供理想的实时性能。
问题11:索引对表增删改查的效率有影响吗?
那么为什么需要搜索引擎呢?
结论:该数据库适用于结构化数据的精确查询,但不适用于半结构化和非结构化数据的模糊查询和灵活搜索(尤其是数据量较大时),不能提供理想的实时性能。
话题二:如何快速找到与仓先生相关的新闻?
分析:我们搜索的时候输入的是仓先生,我们想得到一个标题或内容中收录“仓先生”的新闻列表。
如果title和content列有这样的索引,可以快速找到苍老师的关键字对应的文章id,然后根据文章快速找到文章文章 id。
问题1:您如何看待这个索引的结构?
问题二:为什么叫倒排索引?
英文原名是Inverted index,但没能翻译成倒排索引。应该翻译成:反向索引
问题三:以下两个索引可以合并吗?
问题四:反向索引的记录数会不会很大?
如果是英文,最大是多少?如果是中文,最大可能是多少?
结论:金额不会很大,不到30万;通过这个索引找到文章会非常快。
问题5:如何建立这样的索引?
数据示例
新闻编号:1
新闻标题:托尼和仓太太吃火锅
新闻内容:2018年4月1日,Tony在四川成都参加一个活动的时候,恰巧主办方还邀请了苍老师来增加他的知名度。应主办方的邀请,他和苍夫人一起吃了火锅。太棒了!
如何为上述新闻文章创建反向索引?
如何将一个句子分成多个词?人能分,电脑能分吗?
如果是英文的文章,如何分割?找到与您的查询相匹配的 10 个最佳文档是一回事
英文很好(有空格),但中文不好。但是一定要打分,否则不能建立反向指标。
你必须编写一个特殊的程序来做到这一点:分词器
问题 6:tokenizers 和自然语言是什么关系?
每种语言都有对应的分词器
问题7:如果你想开发一个中文分词器,你认为它如何分词?
例句:张三说的确实有道理。
分析
机器不会分裂,但我们人类会。
问题一:如何划分?
从头开始读一个词,通过前后词的组合,来区分:张三、说的,是真的,是有道理的
问题2:如何判断张三、说的确实是一个词?
因为我们的大脑里有一个单词词典,它是通过与词典匹配来确定的。
问题三:我们为什么不区分:张三、所说的,是真的,是真的,是真的,是有道理的?
因为我们的大脑可以进行歧义分析。
中文分词原理:有词词典,将句子前后词结合,与词典匹配,歧义分析
问题八:java开源的中文分词器有哪些?
百度:中文分词器
有很多,如何选择?
分词效率准确率中英文混合分词支持
常用中文分词器
IKAnalyzer mmseg4j
专业的商用分词器,在词典匹配的基础上加入统计、机器学习、人工标注。可以很好地处理歧义和未注册词,分词速度较慢。百度、谷歌
问题 9:tokenizer 能否统计分词时单词的出现次数和位置?
这两个值有什么用?
问题10:你、我、他、the、land、a、标点符号……这些需要索引吗?
这些词被称为:停用词。分词器支持指定/添加停用词
问题11:出现新词怎么办?
分词器应该支持在它的字典中添加新词。
根据分词结果,我们创建倒排索引如下:
结论:使用分词器对数据进行分段并创建倒排索引。
主题3:既然有了倒排索引,我该如何搜索?
搜索“托尼OR苍老师”相关新闻的步骤是什么?
第 1 步:分割搜索输入
托尼,苍老师
第二步:在反向索引中找到收录tony和苍夫人的文章列表
第三步:合并两个列表,对输出进行排序
{1,12,8,5}
问题1:如何对组合列表进行排序?
我们希望最相关的位于顶部
问题 2:如何衡量相关性?
问题1:我们是如何确定相关的?
收录您要查找的单词
问题2:如何确定更相关?
人类可以通过阅读内容来判断相关性,而机器无法理解人类的话。
有必要建立一个可以评估相关性的模型。
我们可以使用分词器中统计的单词出现次数来构建这个模型吗?评判规则是怎样的?
主题4:如何构建相关性评价模型?
使用事件来构建模型
规则一:统计出现次数,按次数从高到低排序
{{1,5},{5,3},{12,1},{8,1}}
问题一:如果标题出现仓先生,新闻内容出现仓太太,哪一个更适合写仓先生?怎么做
规则二:加权重,标题权重10,内容权重1,计算权重得分,按高低排序
{{1,23},{12,10},{5,3},{8,1}}
这个相关模型非常简单。有时排序不是很准确。
复杂的相关计算模型包括:
tf-idf 词频-逆文档率模型
向量空间模型
贝叶斯概率模型,如:BM25
搜索引擎会提供一种或多种实现方式供选择,也提供扩展。电子商务中搜索相关性的计算网站会考虑的越来越复杂。
主题5:反向索引更新:数据更新时索引是否必须更新?更新好不好?
更新分析:
问题1:添加时如何更新?
问题二:删除时如何更新?
问题 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是一个开源的全文搜索引擎工具包,但它并不是一个完整的全文搜索引擎,而是一个全文搜索引擎框架,提供了完整的查询引擎和索引engine ,文本分割引擎的一部分(两种西方语言,英语和德语)。Lucene 的目的是为软件开发者提供一个简单易用的工具包,以便在目标系统中轻松实现全文搜索功能,或者以此为基础构建一个完整的全文搜索引擎。
Nutch:Apache的顶级开源项目,包括网络爬虫和搜索引擎(基于lucene)系统(与百度和谷歌相同)。Hadoop 就是因为它而诞生的。
Solr:Lucene下的一个子项目,一个基于Lucene的独立企业级开源搜索平台,一个服务。它提供了一个基于xml/JSON/http的api供外部访问,以及一个web管理接口。
Elasticsearch:基于Lucene的企业级分布式搜索平台。它提供了一个宁静的网络界面,让程序员无需了解 Lucene 即可轻松方便地使用搜索平台。
问:如何选择搜索引擎组件或系统?
看成熟度,用企业量。