当我们需要实现全文搜索功能的时候,往往会使用到搜索引擎,比较常用的是Elasticsearch。但是Elasticsearch的硬件配置要求比较高,不同版本间的API兼容性也比较差。今天给大家分享一款轻量级搜索引擎Meilisearch,搜索速度非常快,能实现即时搜索,希望对大家有所帮助!
简介
Meilisearch是一款轻量级搜索引擎,它支持RESTful风格的搜索API,目前在Github上已有50k+star
。其目标是成为适用于所有用户的搜索引擎解决方案,能让用户端的每一位用户获得快速且精准的搜索体验。
Meilisearch主要具有如下特性:
- 搜索速度快:能在50毫秒内获得搜索结果;
- 即时搜索:在你输入搜索关键词时能立马输出结果;
- 智能纠错:即使你输入的关键词有误也能获得精准结果;
- 全面的语言支持:对中文进行了专门的优化支持;
- 高度可定制的搜索与索引:自定义搜索行为更加符合你的需求;
- 支持RESTful API:可以用RESTful风格的搜索API进行调用;
- 支持多种语言的SDK:涵盖Java、JavaScript、Golang、Python等。
下面是使用Meilisearch实现即时搜索的效果图,搜索速度还是非常快的!
安装
使用Docker来部署Meilisearch是非常方便的,我们将采用此种方式!
- 首先通过如下命令来下载Meilisearch的Docker镜像;
docker pull getmeili/meilisearch:v1.13
- 下载完成后使用如下命令来运行Meilisearch容器;
docker run -p 7700:7700 --name meilisearch \
-e MEILI_ENV='development' \
-v /mydata/meiliData:/meili_data \
-d getmeili/meilisearch:v1.13
- 运行成功后就可以访问访问Meilisearch的Mini Dashboard页面了,访问地址:http://192.168.3.101:7700
实战项目
这里给大家分享一个实战项目,mall项目是一套基于 SpringBoot3
+ Vue 的电商系统(Github标星60K),后端支持多模块和2024最新微服务架构
,采用Docker和K8S部署。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!
- Boot项目:https://github.com/macrozheng/mall
- Cloud项目:https://github.com/macrozheng/mall-swarm
- 教程网站:https://www.macrozheng.com
项目演示:
使用
接下来我们就来讲解下Meilisearch的使用,将使用RESTful API的形式。
索引操作
在Meilisearch中,索引是一系列文档的组合,相当于MySQL中的表的概念,这里我们先来讲解它的使用。
- 首先我们下载下Meilisearch官方提供的Demo数据,下载地址:https://www.meilisearch.com/docs/learn/self_hosted/getting_st...
- 下载完成后我们上传到服务器的指定位置,然后通过curl工具将数据导入到Meilisearch中;
- 通过curl往Meilisearch中导入索引的命令如下;
curl \
-X POST '{{MEILISEARCH_URL}}/indexes/movies/documents?primaryKey=id' \
-H 'Content-Type: application/json' \
--data-binary @movies.json
- 接下来我们在Mini Dashboard页面中就可以看到数据了,比如搜索下
Transformers
;
- 如果你想查看Meilisearch中的所有索引,可以使用如下CURL命令;
curl \
-X GET '{{MEILISEARCH_URL}}/indexes'
- 还可以使用Postman来进行调用;
- 如果想要删除索引的话可以使用如下命令。
curl \
-X DELETE '{{MEILISEARCH_URL}}/indexes/movies'
设置操作
索引设置是一个包含很多选项的JSON对象,它可以用于定义Meilisearch的搜索行为,有点类似于MySQL中表结构的概念,这里我们来讲解下它的使用。
- 我们可以通过如下命令查询索引设置;
curl \
-X GET '{{MEILISEARCH_URL}}/indexes/movies/settings'
- 在Postman中使用后返回结果如下;
- 这里我们想要修改下设置,让
title
和release_date
字段变成可以排序的,genres
和release_date
变成可以筛选的;
curl \
-X PATCH '{{MEILISEARCH_URL}}/indexes/movies/settings' \
-H 'Content-Type: application/json' \
--data-binary '{
"sortableAttributes": [
"title",
"release_date"
],
"filterableAttributes": [
"genres",
"release_date"
]
}'
- 在Postman中使用后返回结果如下。
文档操作
在Meilisearch中,文档是一个包含很多属性的对象,有点类似于MySQL中表记录的概念。
- 我们可以通过如下命令来添加文档;
curl \
-X POST '{{MEILISEARCH_URL}}/indexes/movies/documents' \
-H 'Content-Type: application/json' \
--data-binary '{
"id": 1,
"title": "Transformers Test",
"overview": "Young teenager, Sam Witwicky becomes involved in the ancient struggle between two extraterrestrial factions of transforming robots...",
"genres": [
"Adventure",
"Science Fiction",
"Action"
],
"poster": "https://image.tmdb.org/t/p/w500/6eehp9I54syN3x753XMqjKz8M3F.jpg",
"release_date": 1182902400
}'
- 在Postman中使用后返回结果如下;
- 使用如下命令就可以查看文档了;
curl \
-X GET '{{MEILISEARCH_URL}}/indexes/movies/documents/1'
- 在Postman中使用后返回结果如下;
- 修改文档可以使用如下命令;
curl \
-X PUT '{{MEILISEARCH_URL}}/indexes/movies/documents' \
-H 'Content-Type: application/json' \
--data-binary '[
{
"id": 1,
"title": "Transformers Update"
}
]'
- 删除文档可以使用如下命令。
curl \
-X DELETE '{{MEILISEARCH_URL}}/indexes/movies/documents/1'
数据搜索
接下来我们来讲解下如何使用Meilisearch搜索数据;
- 先来一个简单的搜索;
curl \
-X POST '{{MEILISEARCH_URL}}/indexes/movies/search' \
-H 'Content-Type: application/json' \
--data-binary '{ "q": "Transformers" }'
- 在Postman中使用后返回结果如下;
- 再来一个分页搜索;
curl \
-X POST '{{MEILISEARCH_URL}}/indexes/movies/search' \
-H 'Content-Type: application/json' \
--data-binary '{ "q": "Transformers","offset": 0,"limit": 5 }'
- 在Postman中使用后返回结果如下;
- 再来一个搜索排序;
curl \
-X POST '{{MEILISEARCH_URL}}/indexes/movies/search' \
-H 'Content-Type: application/json' \
--data-binary '{ "q": "Transformers","offset": 0,"limit": 5,"sort": ["release_date:desc"]}'
- 在Postman中使用后返回结果如下;
- 再来一个条件搜索;
curl \
-X POST '{{MEILISEARCH_URL}}/indexes/movies/search' \
-H 'Content-Type: application/json' \
--data-binary '{ "q": "Transformers","offset": 0,"limit": 5,"sort": ["release_date:desc"],"filter":"genres = Action OR genres = Adventure"}'
- 在Postman中使用后返回结果如下;
总结
今天带大家体验了一把Meilisearch的搜索功能,对比Elasticsearch,它需要的配置非常低,搜索速度也非常快,感兴趣的小伙伴可以尝试下它!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。