v0.30 版本的新功能
此版本為您帶來用於零停機部署的索引交換、用於瀏覽搜尋結果的編號分頁,並新增了新的任務管理功能。

在本文中,讓我們來看看 Meilisearch 最新更新中的一些最重大變更。您可以在 GitHub 上閱讀完整的變更日誌,但我們將在本文中介紹主要變更。
零停機索引部署
將您的資料庫變更與您的 Meilisearch 索引同步會導致停機。您無法承受「損壞」的搜尋:使用者體驗至關重要。您已經想出了一些解決方法,但這需要時間和資源。一定有更簡單的方法來處理這個問題,對吧?
v0.30 引入了索引交換。您現在可以零停機部署新的索引版本!
若要同步您的主要資料庫和生產中的 Meilisearch 索引 —indexA
— 之間的變更,您只需執行下列步驟
- 步驟 1:建立包含所有這些變更的新索引版本 —
indexA_new
— - 步驟 2:交換索引,這表示您將
indexA
的文件、設定和任務歷史記錄替換為indexA_new
的資料。這是您需要發送的請求,才能實現神奇效果
curl -X POST 'https://127.0.0.1:7700/swap-indexes' -H 'Content-Type: application/json' --data-binary '[ { "indexes": ["indexA", "indexA_new"] } ]'
⏲️ 等待任務的狀態更新為 succeeded
...
🎉 噹!您的變更現在已在生產環境中!您的使用者仍在 indexA
中搜尋,但它現在保存了 indexA_new
的資料,而 indexA_new
則保存了 indexA
的資料。
新功能:任務取消和刪除
v0.30 讓您更能掌控非同步操作:您現在可以取消任務並刪除您的任務歷史記錄。
任務取消
無法取消任務一直是使用者長期以來提出的一個重複出現的問題。無法中斷因錯誤而排隊或處理時間過長的任務可能會非常令人沮喪。
透過 v0.30,這個問題現在已成為過去。透過新的 API 路由 /tasks/cancel
,您可以根據以下項目取消排隊或正在處理的任務
uid
狀態
類型
indexUid
- 它們排隊或開始的日期 (
beforeEnqueuedAt
、afterEnqueuedAt
、beforeStartedAt
、afterStartedAt
)
您可以在我們的文件中了解更多有關任務的資訊。
若要取消所有將文件新增或更新至索引的已排隊任務,您應該發送下列請求
curl -X POST 'https://127.0.0.1:7700/tasks/cancel?statuses=enqueued&types=documentAdditionOrUpdate’
任務刪除
成功或失敗 — 以及現在取消的 — 任務資訊可能會在具有大量非同步操作的執行個體中佔用大量所需的磁碟空間。使用新的 DELETE /tasks
端點清除已完成的任務。
與任務取消一樣,任務刪除可以根據任務的
uid
狀態
類型
indexUid
- 它們排隊或開始的日期 (
beforeEnqueuedAt
、afterEnqueuedAt
、beforeStartedAt
、afterStartedAt
)
但您也可以根據它們完成處理的日期以及取消它們的任務來刪除它們
beforeFinishedAt
afterFinishedAt
canceledBy
下列請求會刪除 2020 年 10 月 11 日上午 11:49:53 之前處理的所有任務。
curl -X DELETE 'https://127.0.0.1:7700/tasks?beforeFinishedAt=2020-10-11T11:49:53.000Z'
新功能:組態檔支援
感謝我們親愛的貢獻者 mlemesle,一種新的設定 Meilisearch 執行個體的方式已進入聊天室。除了環境變數和 CLI 選項之外,您還可以使用組態檔 🥳
組態檔可以輕鬆共享和版本化。它們可讓您在一個地方管理所有組態選項,並一目了然地提供整體視圖。
若要執行此操作,請在單一 .toml
檔案中設定所需的執行個體選項
env = "production" master_key = "YOUR_MASTER_KEY_VALUE"
您可以使用 --config-file-path
CLI 選項或 MEILI_CONFIG_FILE_PATH
環境變數來指定組態檔。否則,Meilisearch 將使用工作目錄中的檔案 ./config.toml
作為預設組態檔。您可以使用下列命令下載預設組態檔
curl https://raw.githubusercontent.com/meilisearch/meilisearch/main/config.toml > config.toml
請注意,在組態檔中指定 config-file-path
金鑰將會擲回錯誤。
如果未提供組態檔,則 Config file path
會設定為 none
。
改進:搜尋結果分頁
v0.30 為需要分頁介面的使用者引入了編號分頁模式。
在 v0.29 之前,當使用搜尋端點時,Meilisearch 只會傳回 estimatedTotalHits
,這是與查詢相符的文件數量的估計值。因此,不建議建立具有頁面選取器的介面。
您現在可以使用新的搜尋參數 page
或 hitsPerPage
來取得查詢的完整點擊次數和總頁數。
curl -X POST 'https://127.0.0.1:7700/indexes/movies/search' -H 'Content-Type: application/json' --data-binary '{ "q": "american ninja", "page": 1 }'
上述請求將提取給定查詢的第一頁結果,並將傳回下列回應
{ "hits": [ // … 20 hits ], "query": "american ninja", "processingTimeMs": 2, "hitsPerPage": 20, "page": 1, "totalPages": 49, "totalHits": 966 }
如您所見,它傳回了詳盡的搜尋結果數 (totalHits
) 和搜尋結果頁數 (totalPages
),這可讓您輕鬆建立編號分頁介面。
👉 請注意,totalHits
和 totalPages
是根據pagination.maxTotalHits 索引設定計算的。
重大變更
欄位重新命名
當依批次刪除文件時,對應的任務物件包含一個欄位,其中包含收到的文件 ID 數量。這個欄位之前稱為 receivedDocumentIds
,現在已重新命名為 providedIds
。
新錯誤
在使用者嘗試存取 /keys
路由但未設定主金鑰的情況下,Meilisearch 現在會擲回更有幫助的錯誤 missing_master_key
{ "message": "Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch.", "code": "missing_master_key", "type": "auth", "link": "https://docs.meilisearch.com/errors#missing_master_key" }
任務篩選和錯誤命名
為了使命名與它們可能具有的值保持一致,我們已將用於篩選任務的查詢參數複數化
indexUid
變成indexUids
type
變成types
status
變成statuses
我們也重新命名了下列錯誤碼
invalid_task_type
為invalid_task_types_filter
invalid_task_status
為invalid_task_statuses_filter
Hacktoberfest 貢獻
我們非常感謝在 Hacktoberfest 期間收到的所有貢獻。上面提到的大部分變更都來自這些貢獻,我們想強調另外兩個。如果沒有我們的貢獻者,我們就不會在該版本中發佈它們。
- 感謝 @mou 支援壓縮 API 請求 (Gzip、Brotli、Zlib)
- 感謝 @jeertmans 提供 Apple Silicon 二進位檔案
其他變更
- Meilisearch 預設已繫結至
127.0.0.1:7700
,這是一個 IPv4 位址。為了讓 Meilisearch 可以透過IPv4 (127.0.0.1:7700
) 和IPv6 ([::1]:7700
) 位址存取,我們已將預設位址變更為localhost:7700
。 - 所有任務物件現在都包含
canceledBy
和error
欄位 - 新的 任務篩選器可用於
GET /tasks
端點uids
beforeEnqueuedAt
/afterEnqueuedAt
beforeStartedAt
/afterStartedAt
beforeFinishedAt
/afterFinishedAt
canceledBy
- 我們引入了一種新的任務類型:
snapshotCreation
。快照任務現在在任務清單中可見 - 索引速度已顯著提高
- 我們已縮減 Meilisearch 二進位檔案的大小,以及 Meilisearch 執行個體在磁碟空間中佔用的大小
- 所有執行個體選項現在都有對應的環境變數。遺失了一些與快照和傾印功能相關的變數
非常感謝我們所有的貢獻者!如果沒有你們的幫助,這個專案不會有很大的進展 🙏
這就是 v0.30 的全部內容!請記得查看變更日誌,以取得完整的版本注意事項。