开源全文搜索引擎MeiliSearch
单独安装
MeiliSearch似乎并没有什么实际的用途,本文只是记录了老苏一次失败的探索。想法应该是没问题的,奈何实力不够啊。
前言
老苏博客上的搜索变得越来越慢,慢的原因应该主要是 2 个:一个是 search.json 的加载速度,一个是全文检索的速度。前者可以通过 CDN 或者其他方式来解决,后者老苏想将 hexo-generator-searchdb 生成的搜索索引文件放到一个 真正的 全文搜索引擎中,而不是继续使用 Local Search。
其实目前慢的主要原因应该还是前者;
找来找去找到了 MeiliSearch ,这是一个建立在 LMDB键值 存储之上的全文搜索引擎。与 Elasticsearch 类似,但 MeiliSearch 可能更适合中等规模的数据集(即少于 500 万行)和较小的应用程序。MeiliSearch 提供快速、相关且可容忍错字的搜索,几乎不需要设置时间,对于任何需要专注于最终用户的强大且易于访问的搜索引擎的开发人员来说,它都是一个很好的解决方案。
老苏想研究一下技术可行性,但是搜索了一下并没有找到现成的方案,第一步打算先安装一个 MeiliSearch,亲自感受下具体的功能,如果没问题的话再来研究下一步
什么是 MeiliSearch ?
MeiliSearch是一个基于Rust语言开发的强大、快速、开源、易于使用和部署的搜索引擎。搜索和索引都是高度可定制的。提供开箱即用的功能,例如错字容忍、过滤器和同义词,支持中文。
什么是 LMDB ?
LMDB数据库和常用的SQLite,MySQL等关系型数据库不同, 它是一种非关系型数据库,以键值对的方式进行存储(更像是字典),其中“键”和“值”的类型都是字符串类型。
安装
在群晖上以 Docker 方式安装。
在注册表中搜索 meilisearch ,选择第一个 getmeili/meilisearch,版本选择 latest。

卷
在 docker 文件夹中,创建一个新文件夹,并将其命名为 meilisearch
| 文件夹 | 装载路径 | 说明 |
|---|---|---|
docker/meilisearch |
/data.ms |
存放数据 |

端口
端口不冲突就行,不确定的话可以用命令查一下
1 | # 查看端口占用 |
| 本地端口 | 容器端口 |
|---|---|
7700 |
7700 |

环境
环境变量是可选的,默认是 developer 模式,可以不设置 master key ,只有在指定为 product 模式才必须设置的
| 可变 | 值 |
|---|---|
MEILI_MASTER_KEY |
master key |

MeiliSearch 的每个实例都有三个键:master、private 和 public。每个密钥在 API 路由上都有一组给定的权限。每当您设置或更改 master key 时,都会自动生成 private key 和 public key。
master key可以用来存取所有的路由private key可以用来存取除了/keys(用来获取master key和private key)的所有路由。public key只能用来进行搜索操作。
老苏生成 master key 的方式是在 Bitwarden 中用密码生成器

运行
在浏览器中输入 http://群晖IP:7700 就能看到主界面
由于生产环境需要
API-key进行搜索,因此Web界面仅在开发模式下可用。

日志中

官方示例
1 | # 获取private key和public key |

官方提供了一个电影数据库 movie.json ,文件下载地址:https://docs.meilisearch.com/movies.json
将文件上传到群晖的 meilisearch 目录
1 | # 进入到 movie.json 所在的目录 |

回到 web 界面,刷新一下

官网的动图能清晰的显示如何使用

search.json
默认情况下 hexo-generator-searchdb 生成的搜索索引文件是 search.xml,但其本身支持 XML 和 JSON 格式输出,所以只要改一下配置即可,search.json 位于博客的根目录下,需将其上传到群晖的 meilisearch 目录,然后执行下面的命令
1 | # 添加文档到 movies 索引 |
但是并没有像官方示例一样,老苏尝试过增加 primaryKey,但始终没有结果,可能是格式不对吧,一时半会儿也没研究明白,先这样吧,等有精力了再说
本来还想着是不是在 vercel 上搭个搜索服务,这下都省了
小结
目前情况下,博客上点 搜索 后弹出的搜索界面,如果是一直转圈,最好是等一会儿,或者重新再刷新一下页面

如果直接显示 放大镜,也就是下面👇这样

那就可以直接输入关键词进行搜索,基本上是秒开

所以再一次证实了慢的原因是加载 search.json 慢,而不是搜索本身慢,因此 MeiliSearch 的研究也就不急在一时。
参考文档
meilisearch/MeiliSearch: Powerful, fast, and an easy to use search engine
地址:https://github.com/meilisearch/MeiliSearchMeiliSearch
地址:https://www.meilisearch.com/MeiliSearch Documentation | MeiliSearch Documentation v0.24
地址:https://docs.meilisearch.com/MeiliSearch vs Elasticsearch
地址:https://blog.meilisearch.com/why-should-you-use-meilisearch-over-elasticsearch/We Built A Search Engine With MeiliSearch and JavaScript: Here’s How You Can Too | Hacker Noon
地址:https://hackernoon.com/we-built-a-search-engine-with-meilisearch-and-javascript-heres-how-you-can-too-zz2d3zaemeilisearch/docs-searchbar.js: Front-end search bar for documentation with MeiliSearch
地址:https://github.com/meilisearch/docs-searchbar.js/90pixel/MeiliAdmin: Open Source MeiliSearch Management Tool
地址:https://github.com/90pixel/MeiliAdminPHP使用MeiliSearch实现全文检索_织梦猫的博客-CSDN博客_meilisearch文档
地址:https://blog.csdn.net/jason19905/article/details/115055666使用MeiliSearch实现Hugo博客搜索 - Jefferywang的烂笔头
地址:https://blog.wangjunfeng.com/post/hugo-meilisearch/