0%

Hexo如何添加搜索功能?

由于博客文章的增多,博文寻找起来多有不便,因此急需添加搜索功能。

要在 Hexo 博客中添加搜索功能,你可以使用一些 Hexo 插件或者集成第三方搜索服务。以下是两种常见的方法:

  1. Hexo 插件:hexo-generator-search

插件GitHub地址:https://github.com/wzpan/hexo-generator-search/tree/master

  1. 集成第三方搜索服务

    另一种方法是集成第三方搜索服务,如 Google Custom Search、Algolia、Elasticsearch 等。你可以将你的博客文章内容上传到这些搜索服务,并使用它们的搜索 API 在博客中添加搜索功能。这种方法通常需要一些额外的配置和开发工作,但可以提供更加强大和灵活的搜索功能。


用hexo-generator-search实现博文搜索

安装步骤:

  • 安装插件:在Hexo根目录文件夹用Gitbash Here运行代码

    1
    npm install hexo-generator-search --save

    注:--save可以不用,--save 参数在 npm 中已经不再建议使用,因为现在 npm 5.x 版本及以上已经默认将安装的包保存到了 package.json 文件中的 dependenciesdevDependencies 字段中,可以在该文件中查看安装版本

  • 获取或者自己写js的搜索代码,由于我不会写就用了【潘伟洲wzpan】大佬的代码文件, search.js 。下载放到Blog\themes\next\source\js,在主题文件夹下,每个人的路径不一定一样。

    获取地址:https://github.com/wzpan/wzpan.github.io/blob/master/js/search.js

  • 在导航栏添加search选项。

    参考:《Hexo博客主题优化》

    https://exbrain.com.cn/2024/01/20/Hexo%E5%8D%9A%E5%AE%A2%E4%B8%BB%E9%A2%98%E4%BC%98%E5%8C%96/

  • 在search文件夹中的index.md中书写搜索代码

    1. 添加搜索框

    2. 引入**jQuery脚本 **,因为search.js 依赖 jQuery,

      代码可以放在index.md中(单页面生效)

      或者主题文件夹下的_layout.swig 或者 _layout.ejs。你可以在这些文件中找到 <head> 部分,或者在页面底部,找到 <body> 结束标签前的位置,然后将这行代码粘贴进去。(全局生效)

    3. 在文章内引入search.js程序

    4. 程序加到搜索框上

    5. 搜索框样式CSS(可选)

    6. 搜索关键字底色高亮CSS(可选)

  • 配置插件:在 Hexo 配置文件_config.yml中添加以下配置:

    ```
    search:
    path: search.xml
    field: post
    content: true

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
      
    > 注:
    >
    > - field
    >
    > \- the search scope you want to search, you can chose:
    >
    > - **post** (Default) - will only covers all the posts of your blog.
    > - **page** - will only covers all the pages of your blog.
    > - **all** - will covers all the posts and pages of your blog.
    >
    > - **content** - whether contains the whole content of each article. If `false`, the generated results only cover title and other meta info without mainbody. By default is `true`.



    - 生成搜索索引:运行 `hexo generate` 命令来生成搜索索引。就会发现`public`根目录下多了`search.xml`文件。

    - 之后常规Hexo clean 、Hexo g 、Hexo d就可以正常使用了。



    ---

    # Next主题开启本地搜索功能(请直接看这个!!!)

    > 因为我是用Next主题,原来这么简单,那我上1p在折腾个啥,fc!

    ### 步骤

    - 安装插件`hexo-generator-searchdb`,命令行输入:

    npm install hexo-generator-searchdb –save

    1
    2
    3

    - 编辑`站点配置文件`,新增以下内容到任意位置,如下:

    search:
    path: search.xml
    field: post
    format: html

    1
    2
    3

    - 编辑`主题配置文件`,启用本地搜索功能,如下:

    Local search

    local_search:
    enable: true

    
    

参考:

https://liam.page/2017/09/21/local-search-engine-in-Hexo-site/

https://littleboy97.gitee.io/_A/Html/hexo%E7%AB%99%E5%86%85%E6%90%9C%E7%B4%A2.html

https://www.bilibili.com/video/BV1ny4y1w7yn/?spm_id_from=333.337.search-card.all.click&vd_source=a07c82c6cb97fb4f6f2e96c58468f044

https://zhgtt666.github.io/2020/07/24/Hexo%E5%8D%9A%E5%AE%A2NexT%E4%B8%BB%E9%A2%98%E6%B7%BB%E5%8A%A0%E6%9C%AC%E5%9C%B0%E6%90%9C%E7%B4%A2/

专业词汇

hexo-generator-search:

HaHack 参考 Christian Fei 的 Simple Jekyll Search 实现了名为 hexo-generator-search 的生成器。安装该生成器之后,在执行 hexo generate 的过程中,会按照配置生成一个XML或者JSON 文件,用于保存全站的文档数据。这个 XML 文件只是简单地做了数据的结构化存储,而完全没有考虑分词、倒排等问题。然后通过JS代码去匹配这个文件的内容,从而达到搜索的目的

使用这个插件,你可以在你的 Hexo 博客中生成一个搜索索引,然后在博客中添加一个搜索框,让用户通过输入关键字来搜索博客文章。


倒排索引(Inverted Index)是一种常用于信息检索的数据结构。它将文档集合中的每个单词映射到包含该单词的文档列表,从而允许根据单词来快速检索相关的文档。

通常,倒排索引由两部分组成:词项(Terms)和倒排列表(Inverted Lists)。

  1. 词项(Terms):词项是文档集合中的单词或者词组。在倒排索引中,每个词项都会被映射到一个或多个文档。
  2. 倒排列表(Inverted Lists):倒排列表是词项到文档的映射。它记录了每个词项在哪些文档中出现过,以及每个文档中出现的位置信息。倒排列表通常包含文档 ID 和位置信息等内容。

倒排索引的优点在于它可以快速地进行全文搜索和相关性排序。当用户输入一个查询词时,系统可以直接查找倒排索引,找到包含该词的文档列表,并且根据相关性对文档进行排序,从而返回最相关的结果给用户。这种检索方式通常比简单的线性搜索效率更高。

倒排索引常用于搜索引擎和文档检索系统中,例如谷歌、百度等搜索引擎就使用了倒排索引来快速地索引和检索网页。


**jQuery **

是一个流行的 JavaScript 库,用于简化客户端(浏览器端)的 HTML 文档遍历、操作和事件处理,jQuery 提供了一组简洁而强大的 API,使得 JavaScript 开发者能够以更简单和更高效的方式处理各种客户端任务。


.json文件:

JavaScript 对象表示法(JSON)的文件扩展名。常用于配置文件、数据交换以及 Web 开发中的 API 通信等方面。用文本编辑器打开。