Typecho 搜索增强:ExSearch

请注意,本文编写于 242 天前,最后修改于 123 天前,其中某些信息可能已经过时。

Typecho 中没有单独的搜索页,绝大多数主题的所谓「搜索页」只是为搜索框单独写了一个样式,具体的搜索还是靠页面跳转。我对 Typecho 的搜索从来没有满意过,因此这次我想办法将其增强。


? 为 Typecho 带来实时搜索体验

项目地址:ExSearch,使用方法见:README.md

对于 VOID 主题,只需要下载启用插件,并建立缓存即可,主题已针对插件做了适配。

你可以点击下面这个按钮,看看效果:

我需要为 Typecho 添加搜索实时响应、高亮与预览功能。泽泽的搜索插件通过 hack Typecho 的内部方法实现了高亮与过滤功能,但是仍然不能实现实时响应。其实也能理解,如果跟随输入实时响应的话,数据库的压力大大增加,而且网络压力也大大增加。必须另辟蹊径。

我在为什么每个人都应该有自己的 Wiki中提到自己启用了 Wikitten 这个 Hexo 主题作为自己的 Wiki 站点主题。其中很重要的一个原因就是它舒服到无以复加的搜索体验。Hexo 这样无后端的博客为我提供了新的思路:将内容静态化,使搜索在前端进行。这样不仅降低了数据库压力,节省了网络请求数,同时也不用与 Typecho 的内部方法作斗争。唯一的缺点是对内容过多的站点来说需要传输一定数量的内容到前端,但这通过缓存静态化与前端长缓存也能缓解。

最终的结果便是这个插件。

如果这个项目对你有所帮助,请考虑向我我捐助 ↓↓↓

添加新评论

本站现已启用评论投票,被点踩过多的评论将自动折叠。与本文无关评论请发留言板。请不要水评论,谢谢。

已有 40 条评论

为了减少请求,我用了个笨办法,建一个单独页面输出所有信息生成json,ajax加载后解析

原理是一样的,但是你这完全没有起到减少请求的作用啊……每次访问仍然要请求数据库一篇一篇地生成 JSON。ExSearch 的做法是生成静态缓存文件,后续请求不经过数据库,没有合成 JSON 这一步。

南蛰 南蛰 回复 @熊猫小A
0 0

现在有了,缓存版

启用插件时报错:Database Query Error

SQLSTATE[HY000]: General error: 1 no such function: version

Typecho_Db_Query_Exception: SQLSTATE[HY000]: General error: 1 no such function: version in /Users/sirit/Documents/_myWORK/site/bian1iang/Typecho/Db/Adapter/Pdo.php:105
Stack trace:
#0 /Users/sirit/Documents/_myWORK/site/bian1iang/Typecho/Db.php(353): Typecho_Db_Adapter_Pdo->query('SELECT version(...', Object(PDO), 1, 'SELECT')
#1 /Users/sirit/Documents/_myWORK/site/bian1iang/Typecho/Db.php(410): Typecho_Db->query(Object(Typecho_Db_Query), 1)
#2 /Users/sirit/Documents/_myWORK/site/imsirit/plugins/ExSearch/Plugin.php(36): Typecho_Db->fetchRow(Object(Typecho_Db_Query))
#3 /Users/sirit/Documents/_myWORK/site/var/Widget/Plugins/Edit.php(102): ExSearch_Plugin::activate()
#4 /Users/sirit/Documents/_myWORK/site/bian1iang/Widget/Plugins/Edit.php(308): Widget_Plugins_Edit->activate('ExSearch')
#5 /Users/sirit/Documents/_myWORK/site/bian1iang/Widget/Do.php(82): Widget_Plugins_Edit->action()
#6 /Users/sirit/Documents/_myWORK/site/bian1iang/Typecho/Widget.php(221): Widget_Do->execute()
#7 /Users/sirit/Documents/_myWORK/site/bian1iang/Typecho/Router.php(135): Typecho_Widget::widget('Widget_Do', NULL, Array)
#8 /Users/sirit/Documents/_myWORK/site/index.php(23): Typecho_Router::dispatch()
#9 {main}

你是用的什么数据库?

Sirit Sirit 回复 @熊猫小A
0 0

sqlite

OK,这应该是我的问题,我只在 MySQL 上测试了。有空修复,感谢反馈。

不知道什么原因数据库连接错误

在站点根目录下 config.inc.php 中添加 define('__TYPECHO_DEBUG__', true); 看看报错信息。

Mark发来贺电~很强大的插件,关闭方式除了关闭按钮建议增加元素外点击关闭功能,用户体验会更好一些

感谢建议,我会考虑的~

新主题 不错 可以当资讯主题了

熊猫小A 熊猫小A 回复 @夏目贵志
0 0

谢谢。不过当资讯主题的话感觉信息密度有点低。

赞,感觉你成长的好快啊。

哈哈谢谢。大概从完全的小白进化到不那么小白还是相对比较简单吧。

(@ο@) 哇~效果好棒

活捉一只泽泽!你的那个也很棒!

很好用,非常感谢,typecho原来的搜索中文有问题,用这个插件搜索中文也变得正常了

不用谢~

加个遮罩和动画效果会不会更好一点。。

遮罩是指背景遮罩吗?现在已有暗色遮罩了。动画效果可以增加~

Lesun Lesun 回复 @熊猫小A
0 0

给个参考就是赤壁市政府门户网左上角的那个点击效果http://www.chibi.gov.cn/

嗯嗯那个效果还是比较炫的。话说你之前那个 .ga 的邮箱我这边老是发信失败。

Lesun Lesun 回复 @熊猫小A
0 0

因为域名过期,我忘了更新

搜索结果如果设置高亮是不是更好看

熊猫小A 熊猫小A 回复 @typecho模板
0 0

现在是加粗的

嗯,加个颜色可以提升用户体验吧,好辨认

熊猫小A 熊猫小A 回复 @typecho模板
0 0

OK,谢谢建议

  1. 1
  2. 2