meilisearch 是一个使用 Rust 编写的全文搜索引擎,高性能,易用,可扩展。虽然之前使用过 [[Elasticsearch]],但是如果自己要维护一个分布式的实例还是挺困难的,正好在我的笔记里面之前有记录下来 meilisearch,Rust 编写,效率高,占用低,就正好学习总结一下。
有一个项目自己的服务器跑了好几年,抓取了超过一千万条下载信息,PostgreSQL 已经不堪重负,经常查询一条数据需要好几秒的时间,单纯的使用 SQL 查询已经完全满足不了需求,也就正好使用 meilisearch 重构一下。
功能
- 高性能:Meilisearch 可以在任何规模的数据集上实现快速搜索,通常在 50 毫秒内返回结果。它支持“搜索即输入”(Search-as-you-type)功能,提供实时反馈,并具有拼写容错能力,即使查询中存在错误也能返回相关结果。
- 相关性优化:支持自定义排序、分面搜索和同义词管理,使搜索结果更加灵活和相关。
- 多语言支持:针对多种语言进行了优化,包括中文、日文等非拉丁语系,并支持停用词处理,忽略对搜索结果影响不大的常见词。
- 高级功能:包括地理位置搜索、多租户支持、高亮显示匹配文本,以及文档管理功能(添加、更新、删除索引中的文档)。
安装
推荐使用 Docker Compose 的方式安装。
git clone https://github.com/einverne/dockerfile.git
cd dockerfile/meilisearch
cp env .env
# edit .env
docker-compose up -d
docker-compose logs -f
导入数据示范
准备数据 movies.json
[
{ "id": 1, "title": "Inception", "genre": "Sci-Fi", "release_year": 2010 },
{ "id": 2, "title": "Interstellar", "genre": "Sci-Fi", "release_year": 2014 },
{ "id": 3, "title": "The Dark Knight", "genre": "Action", "release_year": 2008 }
]
然后确保
curl -X POST 'http://localhost:7700/indexes/movies/documents' \
-H 'Authorization: Bearer YOUR_MASTER_KEY' \
-H 'Content-Type: application/json' \
--data-binary @movies.json
这里一定将 Authorization 替换成自己的 YOUR_MASTER KEY。提交成功之后创建了索引,并且可以直接通过界面进行查询。
查询数据
curl -X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_MASTER_KEY' \
--data-binary '{
"q": "Inter"
}'
可以查询获得结果。
缺点
Meilisearch 在中小数据集上的表现最好,但是根据 HackerNews 的测试,在测试导入 1.16 亿条 HackerNews 数据的时候 Meilisearch 性能显著下降。1