索引
索引是一組具有相關設定的文件。它類似於 SQL
中的表格或 MongoDB 中的集合。
索引由 uid
定義,並包含以下資訊:
範例
假設您管理一個包含電影資訊的資料庫,類似於 IMDb。您可能需要保留多種類型的文件,例如電影、電視節目、演員、導演等。Meilisearch 中,每個類別都會用一個索引表示。
使用索引的設定,您可以自訂該索引的搜尋行為。例如,movies
索引可能包含具有 movie_id
、title
、genre
、overview
和 release_date
等欄位的文件。使用設定,您可以使電影的 title
比 overview
對搜尋結果產生更大的影響,或使 movie_id
欄位無法搜尋。
一個索引的設定不會影響其他索引。例如,即使您的 movies
索引和 costumes
索引在同一個伺服器上,您也可以為它們使用不同的同義詞列表。
索引建立
隱式索引建立
如果您嘗試將文件或設定新增至一個尚不存在的索引,Meilisearch 將會自動為您建立該索引。
明確建立索引
您可以使用建立索引端點來明確建立索引。建立完成後,您可以使用新增文件端點來新增文件。
雖然隱含建立索引更方便,只需要單一 API 請求,但為了生產環境安全,建議採用明確建立索引。這是因為隱含建立索引將多個操作捆綁成單一任務。如果一個操作成功完成,另一個卻失敗,可能會難以診斷問題。
索引 UID
uid
是索引的唯一識別碼。它在建立索引時設定,且必須是整數或僅包含字母數字字元 a-z A-Z 0-9
、連字號 -
和底線 _
的字串。
一旦定義,uid
無法變更,且您無法建立另一個具有相同 uid
的索引。
{
"uid": "movies",
"createdAt": "2019-11-20T09:40:33.711324Z",
"updatedAt": "2019-11-20T10:16:42.761858Z"
}
主鍵
每個索引都有一個主鍵:一個必須存在於索引中所有文件的必要屬性。每個文件必須具有與此屬性相關聯的唯一值。
主鍵用於識別每個文件,以便索引中的兩個文件永遠不會完全相同。如果您新增兩個主鍵值相同的文件,它們將被視為同一個文件:其中一個將會覆蓋另一個。如果您嘗試新增文件,即使只有一個文件缺少主鍵,所有文件都不會被儲存。
您可以為索引設定主鍵,或讓 Meilisearch 推斷。請閱讀更多關於設定主鍵的資訊。
索引設定
索引設定可以被認為是一個 JSON 物件,其中包含許多用於自訂搜尋行為的不同選項。
您可以自訂下列索引設定
若要變更索引設定,請使用更新設定端點或任何子路由。
顯示和可搜尋的屬性
預設情況下,每個文件欄位都是可搜尋的,並會顯示在搜尋查詢的回應中。但是,您可以選擇將某些欄位設定為不可搜尋、不可顯示,或兩者皆是。
您可以使用更新設定端點,或分別使用顯示屬性和可搜尋屬性的端點來更新這些欄位屬性。
獨特屬性
如果您的資料集中包含多個相似的文件,您可能希望在搜尋時只返回一個。假設您的 costumes
索引中有許多不同尺寸的黑色夾克。將 costume_name
設定為獨特屬性,表示 Meilisearch 不會返回多個具有相同 costume_name
的黑色夾克。
使用更新設定端點或更新獨特屬性端點來指定獨特屬性。每個索引只能設定一個欄位作為獨特屬性。
分面
分面是 Meilisearch 中篩選器的特定使用案例:某個東西是分面還是篩選器取決於您的 UI 和 UX 設計。與篩選器一樣,您需要將您的分面新增至 filterableAttributes
,然後使用filter
搜尋參數進行搜尋查詢。
預設情況下,Meilisearch 會為每個分面欄位返回 100
個分面值。您可以使用更新設定端點或更新分面設定端點來變更此設定。
可篩選的屬性
篩選可讓您根據不同類別來精煉搜尋。例如,您可以搜尋特定 genre
的所有電影:Science Fiction
,且 rating
高於 8
。
在篩選任何文件屬性之前,您必須使用更新設定端點或更新可篩選屬性端點,將其新增至 filterableAttributes
。然後,使用filter
搜尋參數進行搜尋查詢。
分頁
為了保護您的資料庫免受惡意抓取,Meilisearch 在搜尋查詢中最多只會返回 1000
個結果。您可以使用更新設定端點或更新分頁設定端點來變更此限制。
排名規則
Meilisearch 使用排名規則對符合的文件進行排序,以便最相關的文件顯示在最上方。所有索引在建立時都使用相同的內建排名規則,並以預設順序執行。這些規則的順序很重要:第一個規則的影響最大,而最後一個規則的影響最小。
您可以變更此順序或定義自訂排名規則,以優先返回某些結果。這可以使用更新設定端點或更新排名規則端點來完成。
可排序的屬性
預設情況下,Meilisearch 會根據相關性排序結果。您可以變更此排序行為,以優先顯示某些結果。
使用更新設定端點或更新可排序屬性端點,將您要排序的屬性新增至 sortableAttributes
。然後,您可以使用sort
搜尋參數,以遞增或遞減順序排序結果。
停用詞
您的資料集中可能包含您想在搜尋期間忽略的字詞,例如,它們沒有語義價值或出現頻率過高(例如,英文中的 the
或 of
)。您可以將這些字詞新增至停用詞列表,Meilisearch 將會在搜尋期間忽略它們。
使用更新設定端點或更新停用詞端點來變更索引的停用詞列表。除了提高相關性之外,將常用字詞指定為停用詞也能大幅提高效能。
同義詞
您的資料集中可能包含具有相似含義的字詞。對於這些字詞,您可以定義同義詞列表:在搜尋目的中,將被視為相同或相似的字詞。由於錯字和查詢拆分等因素,設定為同義詞的字詞不一定總是返回相同的結果。
由於同義詞是針對特定索引定義的,因此它們不會套用至同一 Meilisearch 執行個體上的任何其他索引。您可以使用更新設定端點或更新同義詞端點來建立同義詞列表。
容錯度
容錯度是一項內建功能,可協助您在搜尋查詢包含拼寫錯誤或錯字時,仍然找到相關結果,例如輸入 chickne
而不是 chicken
。此設定可讓您為索引執行下列操作
- 啟用或停用容錯度
- 設定錯字的最小字詞大小
- 在特定字詞上停用錯字
- 在特定文件屬性上停用錯字
您可以使用更新設定端點或更新容錯度設定端點來更新容錯度設定。
交換索引
假設您有一個在生產環境中運行的索引 movies
,您的使用者目前正在對其發出搜尋請求。您想要部署一個具有不同設定的新版本 movies
,但正常更新可能會導致使用者的停機時間。此問題可以使用索引交換來解決。
若要使用索引交換,您會建立第二個索引 movies_new
,其中包含您想要對 movies
進行的所有變更。
這表示 movies
的文件、設定和任務歷史記錄將會與 movies_new
的文件、設定和任務歷史記錄交換,而搜尋用戶端不會有任何停機時間。enqueued
任務的任務歷史記錄不會被修改。
一旦交換,您的使用者仍會向 movies
索引發出搜尋請求,但它將包含 movies_new
的資料。您可以在交換後刪除 movies_new
,或保留它以防萬一出現問題,而您想要換回來。
交換索引是一種原子交易:要么所有索引都成功交換,要么都不交換。
如需詳細資訊,請參閱交換索引端點。