php 是能够做搜索引擎的,如果你不想配置那些简单的插件、扩大,只是想独自用 php 可能搜寻几十万,百万甚至千万量级的文章,是齐全能够实现的。
先睹为快
百万数据索引演示 php 搜索引擎
在做这个 php 搜寻性能之前,我也理解过以后的,比方 elasticsearch 等,一些曾经十分成熟搜寻软件的基本原理。
想理解搜索引擎的流程,能够移步我的其它文章,有具体解说。
这里大抵介绍一下我的 php 搜寻根本逻辑思维
当初的整个架构包含内容爬取、荡涤、入库、索引、搜寻。当然,索引性能,是能够独自拿进去的,如果你不想爬取网页,只是想搜寻本人的内容,定制改变一下是齐全能够的。
内容指定
爬取网页
能够爬取指定网页,只有把你想爬取的(可能是某一类的)网站链接,放在一个 txt 文件内,一般笔记本就足够,就能够很轻松地对这些链接进行多线程爬取。只有你的电脑性能达到中等,设置好爬取层数,每次能够爬取到几十万的网页,也不能爬取太深,不然,他人的服务器压力太大。
自定义内容
你也能够在数据库放入你本人想要搜寻的内容。
分词
想要搜寻,分词是必不可少的。php 的分词工具也很多,如果你的畛域很垂直,那么词库的构建就很重要的,我的词库分类很丰盛,能够随时生成指定畛域的词库,这样分词的后果能力精准。
倒排索引
接下来就是依据分词后果,构建倒排索引,对于倒排索引的常识,能够自行理解,是一个大的知识点。基本上绝大部分的搜索引擎,基本原理都是基于倒排索引,而后在这根底上进行优化。
当数据比拟少时,能够不必太关注数据结构算法,应用简略的存储逻辑就能够达到成果,速度也能保障。当数据达到百万、甚至千万时,就不得不去摸索更高效的数据结构了,在高级版本上,我应用了 bitmap 存储构造,这里的 bitmap 是指 php 的底层位运算,还是相当简单的,喋喋不休说不清,一般使用者也没必要理解这个,高级就行了~~
bitmap 算法在大量数据时,并没有什么劣势,当然也不会比其它算法效率差,当数据及其宏大时,劣势霎时体现进去了,可能很大水平上节约存储空间。
搜寻
接下来是最外围的搜寻了。我不晓得怎么用语言很好地去形容其中的逻辑,因为过程及其不容易了解,也迭代了很多版本,根本的逻辑也是位运算。其中最大的问题是排序,怎么在大量数据下,把最合乎的后果排到后面。
其它
数据量十分大的时候,任何一个解决流程,都极有可能产生内存不够等问题,所有的致力,就是让这个搜索引擎达到一个成果:在一般的个人电脑上,可能索引千万级别的数据,而不必其它插件辅助。而且齐全做到了,只有电脑性能达到中等以上就能够。
整个过程不须要装置任何扩大,可间接运行的 php 文件。应用也很简略,本地搭建一个集成环境,源码扔进去,就能够应用了。