点击上方 好好学java ,选择 星标 公众号

重磅资讯、干货,第一时间送达
今日推荐:我的大学到研究生自学 Java 之路,过程艰辛,不放弃,保持热情,最终发现我是这样拿到大厂 offer 的!个人原创+1博客:点击前往,查看更多

hexo博客添加本地搜索功能的步骤

使用 hexo-generator-searchHexo 插件来做内容搜索,安装命令如下:

npm install hexo-generator-search --save

在 Hexo 根目录下的 _config.yml 文件中,新增以下的配置项:

search:path: search.xmlfield: post

问题出现

通过上面的安装一般是可以实现本地搜索功能的,但是,我的问题出现了,刚刚开始的时候,我是在windows电脑上面配置hexo的博客的,但是,后面我迁移到了mac上,然后本地搜索功能突然就不能用了。

经过自己的调试发现,一般本地功能不能使用了,有以下几个原因。

  • search.xml文件中有不符合规则的字符,导致不能解析。

  • search.xml中有错误,导致不能解析。

  • search.xml文件中有编码不一致的问题,导致xml解析失败。

以上的search.xml就是我们配置了本地搜索后,自动生成的xml格式的包含站点所有博客的文件,通过这个文件就可以进行本地搜索功能。

问题原因

发现问题都在search.xml中,其实,罪魁祸首是你的某些文章有格式问题,导致生成的search.xml也出错了,这很要命啊,到底是哪一篇文章呢?

当我删掉这篇发现本地搜索可以,后面又不行了,这不是玩我吗。

于是有了后面的解决方案。

本地搜索终极解决方案

既然用xml格式始终都是很难解决问题的,那么我就想到了使用更加通用的json格式呗,果不其然,最终完美解决了问题,下面记录解决方法及过程。

第一步

找到站点配置文件

search:path: search.xmlfield: post

将search.xml改为search.json格式。

第二步

找到你的博客主题的search.ejs模板文件,修改下面代码:

<script type="text/javascript">
$(function () {console.log("lets go!");console.log("<%= config.root %>");searchFunc("<%= config.root %>" + "search.xml", 'searchInput', 'searchResult');
});
</script>

也是改为json格式的文件

<script type="text/javascript">
$(function () {console.log("lets go!");console.log("<%= config.root %>");searchFunc("<%= config.root %>" + "search.json", 'searchInput', 'searchResult');
});
</script>
最后一步

修改你的search的本地js文件,比如我的matery主题的就是在js文件夹下的search.js文件。

对这个文件进行json解析的修改,最终就可以成功解决问题。

var searchFunc = function (path, search_id, content_id) {console.log("test");// 'use strict';$.ajax({url: path,dataType: "json",success: function (datas) {// get the contents from search data// var datas = $("entry", xmlResponse).map(function () {//     return {//         title: $("title", this).text(),//         content: $("content", this).text(),//         url: $("url", this).text()//     };// }).get();// console.log(xmlResponse);console.log("test!");console.log(datas);var $input = document.getElementById(search_id);var $resultContent = document.getElementById(content_id);$input.addEventListener('input', function () {var str = '<ul class=\"search-result-list\">';var keywords = this.value.trim().toLowerCase().split(/[\s\-]+/);$resultContent.innerHTML = "";if (this.value.trim().length <= 0) {return;}// perform local searchingdatas.forEach(function (data) {var isMatch = true;var content_index = [];var data_title = data.title.trim().toLowerCase();var data_content = data.content.trim().replace(/<[^>]+>/g, "").toLowerCase();var data_url = data.url;var index_title = -1;var index_content = -1;var first_occur = -1;// only match artiles with not empty titles and contentsif (data_title != '' && data_content != '') {keywords.forEach(function (keyword, i) {index_title = data_title.indexOf(keyword);index_content = data_content.indexOf(keyword);if (index_title < 0 && index_content < 0) {isMatch = false;} else {if (index_content < 0) {index_content = 0;}if (i == 0) {first_occur = index_content;}}});}// show search resultsif (isMatch) {str += "<li><a href='" + data_url + "' class='search-result-title'>" + data_title + "</a>";var content = data.content.trim().replace(/<[^>]+>/g, "");if (first_occur >= 0) {// cut out 100 charactersvar start = first_occur - 20;var end = first_occur + 80;if (start < 0) {start = 0;}if (start == 0) {end = 100;}if (end > content.length) {end = content.length;}var match_content = content.substr(start, end);// highlight all keywordskeywords.forEach(function (keyword) {var regS = new RegExp(keyword, "gi");match_content = match_content.replace(regS, "<em class=\"search-keyword\">" + keyword + "</em>");});str += "<p class=\"search-result\">" + match_content + "...</p>"}str += "</li>";}});str += "</ul>";$resultContent.innerHTML = str;});}});
}

修改很简单,只要把上面的我注释的注释掉,然后将sucess后的xmlResponses改为datas就可以,这样其实解析起来比xml方便很多,省去了很多代码,最重要的是解决了我的问题。

最后

不会,还是得自己看代码,修改解决问题。

最后,再附上我历时三个月总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及春招的总结,目前,已经拿到了腾讯等大厂offer,拿去不谢,github 地址:https://github.com/OUYANGSIHAI/JavaInterview

这么辛苦总结,给个star好不好。 点击阅读原文,直达

为 hexo 博客添加本地搜索功能相关推荐

  1. hexo博客添加本地搜索功能

    写在前面 本文主要描述了怎么添加hexo博客搜索插件,然后启动搜索功能,对两个本地搜索插件的使用进行了描述,文章可能还有很多不足,请大家谅解,欢迎大佬提意见. 本文用的东西 hexo 3.1.0 wi ...

  2. Hexo博客添加评论功能

    Hexo博客添加评论功能 实现了Hexo的评论功能 先附上官网链接valine官网 我使用的是Material-X主题,大多主题都支持,基本在官方主题文档都可以找到使用方法 1.进入官网,注册账号 需 ...

  3. Hexo博客添加搜索功能

    当文件慢慢变多的时候,分类和标签已经不能快速找到所需要的文章,我们需要添加本站的搜索功能. 安装插件 在博客根目录执行命令 npm install hexo-generator-searchdb -- ...

  4. Hugo项目实战-集成评论博客添加评论功能

    实践效果 Quick Start Install Hugo brew install hugo # or port install hugohugo version Create a New Site ...

  5. hexo next主题为博客添加分享功能

    今天心血来潮,决定给博客添加分享功能,百度上首先是找到了使用shareSDK的分享功能,最后在实践的过程中发现它添加时步骤比较多,添加完成后效果比较丑(就是一个长条的浅蓝色按钮),而且点击后想要退出分 ...

  6. hexo博客添加暗色模式_我如何将暗模式添加到我的网站

    hexo博客添加暗色模式 I recently redesigned my website. Here are 2 pictures of how it looked, for reference: ...

  7. 作为程序员我给csdn博客添加打赏功能

    作为程序员我给csdn博客添加打赏功能 前几天在专家微信群里提到c币太多,无法消费的问题,就提出了博客打赏功能. 目前我们csdn的c币除了兑换论坛积分,下载积分,c币商城,csdn学院外几乎没有可消 ...

  8. hexo博客添加暗色模式_我如何向网站添加暗模式

    hexo博客添加暗色模式 同一个网站,两种不同的配色方案 (Same website, two different color schemes) Last year I made it a point ...

  9. Hexo 博客添加看板娘

    Hexo 博客添加看板娘 相信看到这里的小伙伴都有属于自己的hexo博客了吧,废话不多说,我们直接进入主题 我的博客:传送门 1.安装模块 在hexo根目录下用Git执行命令 npm install ...

最新文章

  1. exchange 2003配置ASSP 反垃圾邮件
  2. 【转】谈谈三层架构中MODEL的作用
  3. GDUT1174:我是好人4(容斥定理)
  4. 28.Node.js 函数和匿名函数
  5. C#中的事件和委托(续)
  6. python 头条 上传_Python+selenium自动化之文件上传
  7. python中协程与函数的区别_python 协程与go协程的区别
  8. oracle临时表经常被锁_【赵强老师】Oracle数据库的存储结构
  9. 信息学奥赛一本通 1127:图像旋转 | OpenJudge NOI 1.8 11:图像旋转
  10. 自带python库的环境软件_pyenv虚拟环境管理python多版本和软件库
  11. c语言最新标准 2017,2017最新C语言介绍
  12. FFmpeg设置OpenMax硬件编码
  13. 简单的amr转换mp3音频格式转换方法
  14. 删除下拉框只找23火星软件_下拉框首选28火星软件
  15. [弗曼学习法] Study for learning methods
  16. 最新上架 App Store 全流程
  17. 浅谈手游的数据分析与精细化运营的重要性
  18. 【JavaScript】制作日历
  19. 一文钱憋死英雄汉!给Unix-Center.Net 的建议
  20. 简单Java的商品模块功能

热门文章

  1. 使用css的类名交集复合选择器
  2. 编译成功但链接失败的原因
  3. Ubuntu 安装和修改Apache2端口
  4. 混沌模型时间序列预测
  5. (chap1 网络基础知识)一些概念
  6. 2020 安恒七月赛
  7. DRF框架—序列化器中的字段校验规则
  8. 15-Arm-Confidential-Compute-Software-Stack
  9. C++判断exe是32位还是64位
  10. ANSI,ASCII,UNICODE