编程原力 Algolia

今天克服了一下懒癌症状,折腾了差不多两个小时把网站的 搜索功能 添加上了,估计肯定是有问题的,期待在后续的使用中接受大家的反馈吧。我也没有实现太复杂的功能,基本就是非常简单的搜索,应该能够满足目前这个阶段大家对于网站搜索的需求。我之前也比较担心Algolia 是国外的搜索服务,速度可能会比较慢,但是似乎使用起来也还不错,我觉得能够达到我心里的预期。

在国内有非常多的网站,包括一些知名的资源类网站或是论坛网站,对搜索都是有限制的,不能频繁搜索,一分钟可能会限定在6次之内,主要就是因为是在本地服务器搭建的搜索环境,更恐怖的方式就是直接模糊匹配数据库中的数据,然后返回搜索结果。这样的方式在很多开源的 CMS 系统或者论坛系统中非常常见,数据量小的时候没啥问题,多了之后,搜一次东西就像化疗一次一样,一群人同时搜点东西真的能把数据库给整死,因此不得不对搜索次数做限制,而且匹配的数据也很难做到比较好的模糊匹配和识别。

后来出现了专门服务于搜索的工具和服务,比如大名鼎鼎的 ElasticSearch,用专业的方式构建索引数据,让关键词 的精准匹配和模糊匹配都做到了非常高的水准;另一方面是不再直接搜索数据库的数据,避免了搜索数据库导致数据库崩溃的惨剧,但是这类搜索工具的搭建却比较麻烦,使用起来也并不是那么方便。由于仍然是要部署在服务器中,还是要消耗服务器的计算资源。

如果你搜索 站内搜索 的话,应该能看到不少站内搜索的产品,百度啊,360啊等等都有自己的站内搜索解决方案,这类产品简单易用,非常容易搭建。对于英文不好的同学来说,使用站内搜索工具实现搜索功能会非常轻松,而且搜索的时候也不消耗自身服务器的资源,是个不错的选择。缺点就是页面风格无法定制成我们想要的样子,而且强行捆绑了 百度 或者 360 搜索服务,对于颜控或者有品质要求的人来说,可能接受不了它的显示样式。

最后呢,我选择了 Algolia,说实话,如果不是接触了 Laravel ,我压根就不知道这货的存在。最近两三年这货的发展速度也着实惊人,我一直依赖对她也并不信任,但是要想短时间内添加上搜索功能并且与 Laravel 系统无缝连接的话,它真的是首选。它也能让搜索页面和网站保持相同的调调,想怎么定制就怎么定制,这一点我喜欢。但是使用 Algolia 真的有坑啊:

1. 中文分词的问题

不支持中文分词,多年来我特别在意 中文分词 这个事儿,但是也恰恰是经过了这么多年的洗礼,我的态度也慢慢发生了变化,我已经不那么看重中文分词了,它不是想象中的那么重要,人们总在用各种手段和角度做分词,但是其实最好的算法和处理方式不在机器上,而是在人。使用者看到搜索结果后很自然的就会用自己的大脑对信息进行筛选,进行关键词匹配和垃圾信息、干扰信息的快速区分,人才是最聪明的,所以这次我放弃 中文分词,考验大家的信息处理能力了

2. Algolia 有免费和付费服务两种,免费的服务对索引的数量和索引内容的字数有限制

比如一篇文章字数太多,那就索引不了了,不光索引不了,上传数据的时候还直接崩溃,导致后面的数据即便没有超过限制仍然无法上传索引数据;

 

OK,添加了搜索,算是 Coding10 的一个小进步,希望大家用的 Happy ,写这篇博客写了老半天,看来晚睡在所难免了 ~