php 搜索引擎优化(搜索引擎技术很感兴趣的大致流程和架构和算法(一))
优采云 发布时间: 2021-12-31 04:01php 搜索引擎优化(搜索引擎技术很感兴趣的大致流程和架构和算法(一))
前言
因为对搜索引擎技术很感兴趣,所以开始尝试开发搜索引擎。参考了网上有限的资料,再加上自己的研究,终于开发了一个全网的小型搜索引擎,底部有项目地址和搜索测试图片。
本项目语言为PHP(语言不重要,主要是思想、架构、算法)。
搜索引擎一、网络采集的一般流程
需要使用网络爬虫来采集网页。由于互联网连接种类繁多且极其不稳定,因此需要一个强大的爬虫系统来处理复杂的情况。爬行策略一般分为深度优先和广度优先两种情况,具体选择视情况而定。一个HTTP请求非常耗时,从1秒到几秒不等,所以需要使用多线程爬取(我用的是curl_multi);同时可以有条件地配置集群爬取。
二、预处理
预处理是搜索引擎中最复杂的部分。基本上,大多数排序算法在预处理阶段生效。然后,在预处理步骤中,搜索引擎主要对数据进行如下处理:
提取 关键词
蜘蛛爬取的页面和我们在浏览器中查看的源码是一样的。代码通常很乱,很多都与页面的主要内容无关。因此,搜索引擎需要做以下几件事:
① 代码去噪。去掉网页中的所有代码,只留下文字。
②去除非文本关键词。比如页面上的导航栏以及其他不同页面共享的公共区域关键词。
③去除停用词。停用词是指没有特定含义的词,如“的”、“在”等。
当搜索引擎得到这个网页的关键词时,它会用自己的分词系统把这篇文章分成一个分词列表,然后存入数据库,并与这篇文章的网址。
网页去重
互联网上有很多重复的网页内容。如果不经处理就存入数据库,会严重影响搜索体验。这一步涉及到海量数据的去重技术。由于网页不能简单地通过字符串比较来比较重复,因此网页去重的一般逻辑是提取网页的指纹(涉及自然语言处理、词向量等),然后进行比较和去重。复制。
比较字符串的相似度,一般的技术有“余弦相似度”、“汉明距离”等。
网页去噪
在网页去噪过程中,去除网页中的标签等无用内容,充分利用网页代码(如H标签、强标签)、关键词密度、内链锚文本等. 来分析这个网页 书中最重要的一句话。
数据保存和更新
当数据量上来时,所有的小问题都会变成大问题。大量数据处理后,存储在数据库中。数据库的选择和设计尤为重要。因为要兼顾海量数据的快速插入和查询。保存的数据也要考虑数据更新的问题,设计更新策略。这么多内容的爬取和更新,对服务器的性能和数量都会有更高的要求。
页面重要性分析
确定一个网页的权重值,结合上述“重要信息分析”,建立该网页的关键词集合p中每个关键词的排名系数。
倒排索引
搜索引擎之所以能够快速找到对应的内容,是因为使用了索引。索引是一种数据结构。一般来说,搜索引擎采用倒排索引结构,即先对网页内容进行切分,将同一切分的不同文档id进行整合,以此类推。您可以了解更多相关详情。搜索引擎需要有很高的召回率,同时又要保证搜索效果,所以分词的选择和分词策略需要慎重考虑和选择。
索引分为全索引和增量索引。全索引是一次性全部更新,比较耗时。增量索引是每次只更新“新增内容”索引,然后将查询与旧索引合并。
三、咨询服务
查询服务,顾名思义就是在搜索界面处理用户查询请求。搜索引擎构建检索器,然后分四步处理请求。
查询重写
搜索语句中有相当一部分可能不清楚和不完整。这时候如果按照原来的内容进行分词搜索,效果肯定是不尽如人意的。这时,必须重写查询,使搜索词更准确地表达搜索者的想法。,从而达到更高的召回率。
根据查询方式用关键词切词。
首先,先将用户搜索到的关键词划分为关键词的序列,我们暂时用q来表示用户搜索到的关键词q划分为q={q1,q2 , q3,..., qn}。
然后根据用户的查询方式,比如所有单词是否连在一起或者中间是否有空格,并根据q中不同关键词的词性,来确定显示的要求查询词中的每个词 占有的重要性。
内容过滤
在很多网页内容中,必然存在一些非法内容,因此需要删除相关内容,防止其显示在前台;有时搜索者会搜索一些敏感内容,并且必须处理搜索查询。
排序搜索结果
我们有搜索词集q,计算q中每个关键词相对于其所属文档的重要性,进行综合排序算法,搜索结果就出来了。排序算法是搜索引擎的核心,影响着搜索结果的准确性。实际应用中排序的计算方法是多维的,极其复杂。
显示搜索结果和文档摘要
当有搜索结果时,搜索引擎会将搜索结果显示在用户界面上供用户使用。一般情况下,搜索词会被标记为红色以获得更好的显示效果。
其他
优化内容,包括使用redis等缓存工具缓存搜索结果;保证速度,使用cdn等等。
搜索结果测试
总结 以上只是简单描述了搜索引擎的大致流程,具体还有很多细节。我的项目地址是海豚搜索,欢迎体验。受客观环境的限制,现在存储的数据量并不大,只有几千万。