新年,新搜索

转眼间,所谓的新世纪也已经过去了整整10年,换言之,也不那么新了。但是每个新年都让人觉得有必要凭空地创造出一些旧年所无的,来证明自己的新年的确是与往年不同的时节。放在GAOBO.ORG首页上的搜索是个极少改动的部件,但是最近我感觉它确实是需要更新一下了。如您所见,它是一个Google自定义搜索引擎。之前我很傻很天真地把GAOBO.ORG的每一个子域名认真地添加到这个自定义搜索引擎的搜索网站列表中去,但是其实用一个网址格式就可以完全把GAOBO.ORG的全部子域名网站信息都概括了。这么一来,我自然也就产生了这样的想法:为什么只能选择搜索GAOBO.ORG内部的内容呢?我为何不能指定将亲人和朋友的内容全部纳入搜索范围,甚至将自己的搜索引擎当作Internet搜索引擎来用?这么一想,设计的思路就成为了划分为三个层级的搜索:只有GAOBO.ORG内容,只有GAOBO.ORG和我的亲人和朋友的网站内容,以及Internet搜索。 Google自定义搜索引擎的设计选项是十分有张力的,可以同时适应非常理解脚本的人和完全不懂脚本的人,也可以同时适应对脚本要求很严格的浏览器环境和对脚本支持非常到位的浏览器环境。 Google自定义搜索引擎选项要求一览表 搜索引擎类型 要求开发人员脚本能力 要求浏览器脚本支持 Google托管页面 低 低 提交页面 + 结果页面 高 低 单页面(Ajax) 中 高 Google自定义搜索引擎选项优缺点一览表 搜索引擎类型 优点 缺点 Google托管页面 无须开发人员有HTML知识,由Google处理搜索结果显示的一切问题,对浏览器的脚本支持要求也很低。 结果页面不可定制、失去了控制,而且搜索结果页面成了“google.com”域内的页面,不专业。 提交页面 + 结果页面 开发人员能够精准地定制提交页面和结果页面的全部内容,并且对于浏览器的脚本支持的要求也很低。 开发人员必须非常了解HTML,并且对于提交页面和结果页面都需要有管理权限。 单页面(Ajax) 对开发人员的要求不算高,而且在同一个页面里就可以在指定的层中即时显示结果。 对于浏览器的脚本支持要求比较苛刻,并且用户会不太习惯“如此美妙”的搜索体验。 之前,我使用的是第二种选项,原因是我需要对结果页面的控制权。现在看来,要求更多的控制权总是正确的。不过,还是可以从代码的变迁中看出Google对于服务的持续改进。对于开发者社群的友好是软件和互联网企业成功的不二法门,毕竟,如果有大量的开发者开始使用一个服务集成到他自己的解决方案中去,它会不成功吗?但是,什么样的服务会有很多开发者应用呢?显然是那些给他们的开发带来方便、让他们写代码的体验更加美好的服务。 下面是改进前的搜索提交代码模板: 下面是改进以后的: 一个重大的改变是:提交表格的id从带有自定义引擎唯一ID的形式(“searchbox_015090948855443073860:numm_anlqns”)改成了不带这个ID的形式(“cse-search-box”)。其它的不一致,比如cof的值,比如搜索的控件加上了层的包装,都是小节。这个改变的意义在于:欲提交的form的id统一化了,否则如果需要以同一的文本框输入搜索关键字,但是提交到不同的自定义搜索引擎的话,会极为麻烦。因为这么一个就要改变整个的form结构,要采用非常迂回的手段来使得“看起来提交给同一form的字段”实际上被提交给了不同的数个form,这样一来就不得不根据选择来临时决定调用哪个form的submit方法,而不能用最干净、最简练、最跨平台的submit按钮来实现。并且,这样会造成显示水印的Javascript语句不一致(它是根据form的id来绑定的)。最重要的是,原先的设计会造成结果页面的不一致,这样就需要为不同的自定义搜索引擎制作不同的结果页面——这样的设计显然是太笨拙了。实际上,有什么必要让提交form的id不一致呢?这个id难道不是只要通过一个控件来标识就可以了吗?为什么要用冗余的方式来表示同一个信息呢?显然,Google的复审机制发现了这个问题,现在,无论使用哪一个自定义搜索引擎,所有的结果页面都是完全同一的了。至于需要用同一控件的名字来提交不同的自定义搜索引擎的唯一ID这件事,解决起来就易如反掌了:只需要把hidden控件换成单选框控件,并保持名字不变即可。反正在提交form的时候,是只认控件的名字,而不管控件的类型的。Google简直就是为了解决我手头的问题而更改了自己的设计的,你说说我能不喜欢这样的技术吗? 于是,创建了三个不同的自定义搜索引擎(以后还可以创建更多),满足了我的需求。欢迎写信给support@gaobo.org,把你的博客也加入我的朋友圈子的搜索范围哟!总之,对我个人来说,不用再切到Google首页就可以搜索Internet,这实在是好事一件。 Read More »