php可以做搜索吗?php搜索引擎的尝试

php是可以做搜索引擎的,如果你不想配置那些复杂的插件、扩展,只是想单独用php能够搜索几十万,百万甚至千万量级的文章,是完全可以实现的。

先睹为快

百万数据索引演示 php搜索引擎

在做这个php搜索功能之前,我也了解过当前的,比如elasticsearch等,一些已经非常成熟搜索软件的基本原理。

想了解搜索引擎的流程,可以移步我的其它文章,有详细讲解。

这里大致介绍一下我的php搜索基本逻辑思想

现在的整个架构包括内容爬取、清洗、入库、索引、搜索。当然,索引功能,是可以单独拿出来的,如果你不想爬取网页,只是想搜索自己的内容,定制改动一下是完全可以的。

内容指定

爬取网页

可以爬取指定网页,只要把你想爬取的(可能是某一类的)网站链接,放在一个txt文件内,普通笔记本就足够,就可以很轻松地对这些链接进行多线程爬取。只要你的电脑性能达到中等,设置好爬取层数,每次可以爬取到几十万的网页,也不能爬取太深,不然,别人的服务器压力太大。

自定义内容

你也可以在数据库放入你自己想要搜索的内容。

分词

想要搜索,分词是必不可少的。php的分词工具也很多,如果你的领域很垂直,那么词库的构建就很重要的,我的词库分类很丰富,可以随时生成指定领域的词库,这样分词的结果才能精准。

倒排索引

接下来就是根据分词结果,构建倒排索引,关于倒排索引的知识,可以自行了解,是一个大的知识点。基本上绝大部分的搜索引擎,基本原理都是基于倒排索引,然后在这基础上进行优化。
当数据比较少时,可以不用太关注数据结构算法,使用简单的存储逻辑就可以达到效果,速度也能保证。当数据达到百万、甚至千万时,就不得不去探索更高效的数据结构了,在高级版本上,我使用了bitmap存储结构,这里的bitmap是指php的底层位运算,还是相当复杂的,三言两语说不清,普通使用者也没必要了解这个,高级就行了~~

bitmap算法在少量数据时,并没有什么优势,当然也不会比其它算法效率差,当数据及其庞大时,优势瞬间体现出来了,能够很大程度上节约存储空间。

搜索

接下来是最核心的搜索了。我不知道怎么用语言很好地去描述其中的逻辑,因为过程及其不容易理解,也迭代了很多版本,基本的逻辑也是位运算。其中最大的问题是排序,怎样在大量数据下,把最符合的结果排到前面。

其它

数据量非常大的时候,任何一个处理流程,都极有可能发生内存不够等问题,所有的努力,就是让这个搜索引擎达到一个效果:在普通的个人电脑上,能够索引千万级别的数据,而不用其它插件辅助。而且完全做到了,只要电脑性能达到中等以上就可以。

整个过程不需要安装任何扩展,可直接运行的php文件。使用也很简单,本地搭建一个集成环境,源码扔进去,就可以使用了。

作者:会飞的鸟原文地址:https://segmentfault.com/a/1190000043835263

%s 个评论

要回复文章请先登录注册