Stories

Detail Return Return

超越Elasticsearch!號稱下一代搜索引擎,性能炸裂! - Stories Detail

當我們需要實現全文搜索功能的時候,往往會使用到搜索引擎,比較常用的是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中使用後返回結果如下;

  • 這裏我們想要修改下設置,讓titlerelease_date字段變成可以排序的,genresrelease_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

user avatar niuqh Avatar liu_486 Avatar feixiangdemojing Avatar renxingdebenma Avatar 8848_62c77d4bb2532 Avatar
Favorites 5 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.