文件
文件是一個由一個或多個欄位組成的物件。每個欄位包含一個屬性及其相關的值。文件作為組織資料的容器,是 Meilisearch 資料庫的基本建構區塊。若要搜尋文件,您必須先將它新增至索引。
如果兩個索引包含完全相同的文件,則它們之間不會共享任何內容。相反地,這兩個文件將被視為不同的文件。根據索引的設定,文件的大小可能會有所不同。
結構
重要術語
- 文件:一個物件,其中包含以一個或多個欄位形式呈現的資料
- 欄位:一組連結在一起的兩個資料項目:屬性和值
- 屬性:欄位的第一部分。作為其關聯值的名稱或描述
- 值:欄位的第二部分,由任何有效的 JSON 類型資料組成
- 主要欄位:所有文件中都必須存在的特殊欄位。它包含主鍵和文件識別碼
欄位
欄位是一組連結在一起的兩個資料項目:屬性和值。文件由欄位組成。
屬性是一個區分大小寫的字串,可作為欄位的名稱,讓您儲存、存取和描述資料。
該資料是欄位的值。每個欄位都有其值所決定的資料類型。每個值都必須是有效的 JSON 資料類型。
如果值是字串,它最多可包含 65535 個位置。超出 65535 個位置限制的文字將被忽略。
如果欄位包含物件,Meilisearch 會在索引期間使用點記法將其扁平化,並將物件的鍵和值帶到文件本身的根層級。此扁平化的物件僅是一種中間表示法 — 你將在搜尋時取得原始結構。你可以在我們的專屬指南中閱讀更多相關資訊。
透過排名規則,你可以決定哪些欄位比其他欄位更相關。例如,你可能會決定最近的電影應該比舊電影更相關。你也可以將某些欄位指定為顯示或可搜尋。
顯示和可搜尋欄位
預設情況下,文件中所有欄位都是顯示和可搜尋的。顯示的欄位包含在每個匹配的文件中,而可搜尋的欄位則搜尋匹配的查詢詞。
你可以使用更新設定端點,或顯示屬性和可搜尋屬性的個別更新端點修改此行為,以便欄位是
- 可搜尋但不可顯示
- 可顯示但不可搜尋
- 既不可顯示也不可搜尋
在後一種情況下,該欄位將在搜尋期間被完全忽略。但是,它仍將儲存在文件中。
若要了解更多資訊,請參閱我們的顯示和可搜尋屬性指南。
主要欄位
主要欄位是一個特殊欄位,必須存在於所有文件中。它的屬性是主要鍵,其值是文件 ID。如果你嘗試索引缺少主要鍵或對於給定的索引具有錯誤主要鍵的文件,將會導致錯誤且不會新增任何文件。
若要了解更多資訊,請參閱主要鍵說明。
上傳
預設情況下,Meilisearch 會將所有有效負載的大小(因此也包括文件上傳)限制為 100MB。你可以使用 http-payload-size-limit
選項在執行階段變更有效負載大小限制。
Meilisearch 在索引文件時會使用大量 RAM。當你增加批次大小時,請注意你的RAM 可用性,因為這可能會導致 Meilisearch 崩潰。
當使用新增或更新文件端點時,請確保
- 有效負載格式正確。沒有多餘的逗號、不匹配的括號、遺漏的引號等。
- 所有文件都以陣列形式傳送,即使只有一個文件也一樣
資料集格式
Meilisearch 接受以下格式的資料集
JSON
以 JSON 物件表示的文件是以大括號括住的鍵值對。因此,適用於格式化 JSON 物件的任何規則也適用於格式化 Meilisearch 文件。例如,屬性必須是字串,而值必須是有效的 JSON 資料類型。
當接收到 application/json
內容類型標頭時,Meilisearch 只會接受 JSON 文件。
舉例來說,假設你正在建立包含有關電影資訊的索引。一個範例文件可能如下所示
{
"id": 1564,
"title": "Kung Fu Panda",
"genres": "Children's Animation",
"release-year": 2008,
"cast": [
{ "Jack Black": "Po" },
{ "Jackie Chan": "Monkey" }
]
}
在上面的範例中
"id"
、"title"
、"genres"
、"release-year"
和"cast"
是屬性- 每個屬性都與一個值相關聯,例如,
"Kung Fu Panda"
是"title"
的值 - 文件包含一個具有主要鍵屬性和唯一文件 ID 作為其值的欄位:
"id": "1564"
NDJSON
NDJSON 或 jsonlines 物件由個別行組成,其中每行都是有效的 JSON 文字,且每行都以換行符號分隔。任何適用於格式化 NDJSON 的規則也適用於 Meilisearch 文件。
當接收到 application/x-ndjson
內容類型標頭時,Meilisearch 只會接受 NDJSON 文件。
與 JSON 相比,NDJSON 具有更好的寫入效能,並且對 CPU 和記憶體的負擔較小。它更容易驗證,而且不像 CSV,它可以處理巢狀結構。
上面的 JSON 文件在 NDJSON 中會如下所示
{ "id": 1564, "title": "Kung Fu Panda", "genres": "Children's Animation", "release-year": 2008, "cast": [{ "Jack Black": "Po" }, { "Jackie Chan": "Monkey" }] }
CSV
CSV 檔案將資料表示為以分隔符號字元分隔的值序列。Meilisearch 接受 CSV 文件的 string
、boolean
和 number
資料類型。如果你未指定屬性的資料類型,則預設為 string
。空白欄位(例如 ,,
和 , ,
)將被視為 null
。
預設情況下,Meilisearch 使用單個逗號 (,
) 作為分隔符號。將 csvDelimiter
查詢參數與新增或更新文件或新增或取代文件端點一起使用,以設定不同的字元。任何適用於格式化 CSV 的規則也適用於 Meilisearch 文件。
當接收到 text/csv
內容類型標頭時,Meilisearch 只會接受 CSV 文件。
與 JSON 相比,CSV 具有更好的寫入效能,並且對 CPU 和記憶體的負擔較小。
上面的 JSON 文件在 CSV 中會如下所示
"id:number","title:string","genres:string","release-year:number"
"1564","Kung Fu Panda","Children's Animation","2008"
由於 CSV 不支援陣列或巢狀物件,因此無法將 cast
轉換為 CSV。
自動批次處理
自動批次處理將相似的連續操作合併到單個批次中並一起處理。這顯著加快了索引過程。
當滿足以下條件時,Meilisearch 會批次處理諸如文件新增和刪除等操作
- 目標相同索引
- 是緊接著的連續操作
同一個批次中的任務共享相同的 startedAt
、finishedAt
和 duration
值。
如果任務因文件無效而失敗,它將會從批次中移除。批次的其餘部分仍將正常處理。如果發生internal
錯誤,整個批次將失敗,並且其中的所有任務都將共享相同的 error
物件。
自動批次處理和任務取消
如果你取消的任務是批次的一部分,Meilisearch 會中斷整個過程、捨棄所有進度並取消該任務。然後,它會自動建立一個沒有取消任務的新批次,並立即開始處理。