當我們需要實現全文搜索功能的時候,往往會使用到搜索引擎,比較常用的是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,它需要的配置非常低,搜索速度也非常快,感興趣的小夥伴可以嘗試下它!
項目地址
https://github.com/meilisearch/meilisearch