索引

    索引是一組具有相關設定的文件。它類似於 SQL 中的表格或 MongoDB 中的集合。

    索引由 uid 定義,並包含以下資訊:

    範例

    假設您管理一個包含電影資訊的資料庫,類似於 IMDb。您可能需要保留多種類型的文件,例如電影、電視節目、演員、導演等。Meilisearch 中,每個類別都會用一個索引表示。

    使用索引的設定,您可以自訂該索引的搜尋行為。例如,movies 索引可能包含具有 movie_idtitlegenreoverviewrelease_date 等欄位的文件。使用設定,您可以使電影的 titleoverview 對搜尋結果產生更大的影響,或使 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 搜尋參數,以遞增或遞減順序排序結果。

    深入了解排序。

    停用詞

    您的資料集中可能包含您想在搜尋期間忽略的字詞,例如,它們沒有語義價值或出現頻率過高(例如,英文中的 theof)。您可以將這些字詞新增至停用詞列表,Meilisearch 將會在搜尋期間忽略它們。

    使用更新設定端點更新停用詞端點來變更索引的停用詞列表。除了提高相關性之外,將常用字詞指定為停用詞也能大幅提高效能。

    深入了解停用詞。

    同義詞

    您的資料集中可能包含具有相似含義的字詞。對於這些字詞,您可以定義同義詞列表:在搜尋目的中,將被視為相同或相似的字詞。由於錯字和查詢拆分等因素,設定為同義詞的字詞不一定總是返回相同的結果。

    由於同義詞是針對特定索引定義的,因此它們不會套用至同一 Meilisearch 執行個體上的任何其他索引。您可以使用更新設定端點更新同義詞端點來建立同義詞列表。

    深入了解同義詞。

    容錯度

    容錯度是一項內建功能,可協助您在搜尋查詢包含拼寫錯誤或錯字時,仍然找到相關結果,例如輸入 chickne 而不是 chicken。此設定可讓您為索引執行下列操作

    您可以使用更新設定端點更新容錯度設定端點來更新容錯度設定。

    深入了解容錯度。

    交換索引

    假設您有一個在生產環境中運行的索引 movies,您的使用者目前正在對其發出搜尋請求。您想要部署一個具有不同設定的新版本 movies,但正常更新可能會導致使用者的停機時間。此問題可以使用索引交換來解決。

    若要使用索引交換,您會建立第二個索引 movies_new,其中包含您想要對 movies 進行的所有變更。

    這表示 movies 的文件、設定和任務歷史記錄將會與 movies_new 的文件、設定和任務歷史記錄交換,而搜尋用戶端不會有任何停機時間enqueued 任務的任務歷史記錄不會被修改。

    一旦交換,您的使用者仍會向 movies 索引發出搜尋請求,但它將包含 movies_new 的資料。您可以在交換後刪除 movies_new,或保留它以防萬一出現問題,而您想要換回來。

    交換索引是一種原子交易:要么所有索引都成功交換,要么都不交換

    如需詳細資訊,請參閱交換索引端點