支援的檔案格式
最後更新
watcher 會索引哪些檔案、略過哪些檔案,以及各格式如何切成可搜尋的 chunk(切塊)。
依副檔名分派
副檔名以小寫比對(
internal/filesystem/walkFiles.go)。| 副檔名 | Parser | 切塊單位 | 紀錄的 kind |
|---|---|---|---|
.pdf | pdftotext -layout -enc UTF-8,移除換頁字元 | 段落 | pdf |
.docx | 本文,接著頁首、頁尾、註腳、章節附註 | 段落 | docx |
.pptx | 投影片 XML 文字,依投影片編號排序 | 每張非空白投影片一個 chunk | pptx |
.csv、.tsv | CSV reader(.tsv 以 tab 分隔),去除 UTF-8 BOM | 32 列資料 | csv |
.xlsx | 僅第一個工作表 | 32 列資料 | xlsx |
| 其他副檔名 | 通過文字檢查時當純文字讀取 | 段落 | text |
段落切塊
PDF、DOCX 與純文字檔的內容以空白行切分;只含空格或 tab 的行也視為空白行。每個段落去除前後空白、捨棄空段落,其餘段落從 1 開始編號,並一併記錄總數。段落內的行保留原本的換行。
- Alpha Go notes
- line two
- Second paragraph about SQLite
這份檔案產生兩個 chunk:chunk 1 是前兩行並保留其間的換行,chunk 2 是最後一行。
表格切塊
CSV、TSV 與 XLSX 以第一列為表頭。資料列每 32 列組成一個 chunk,每列獨立一行,格式為
[列號] 表頭=值, ...,列號從 1 起算:- [1] name=ann, role=dev
- [2] name=bob, role=ops
| 情況 | 行為 |
|---|---|
| 表頭儲存格為空 | 鍵名改為 col<N> |
| 資料列儲存格多於表頭 | 多出的儲存格捨棄 |
| 只有表頭列,或檔案為空 | 不產生 chunk;該檔先前的資料列會被 dismiss |
| CSV 或 TSV 大於 1 MiB | Parser 錯誤,檔案不會被儲存 |
略過的檔案
| 規則 | 範例 |
|---|---|
| 排除的檔名 | .DS_Store |
| 二進位副檔名 | 圖片(.png、.jpg、.heic、.svg)、影片(.mp4、.mov)、音訊(.mp3、.wav)、壓縮檔(.zip、.tar、.gz)、執行檔與函式庫(.exe、.so、.dylib)、安裝檔(.dmg、.deb)、bytecode(.class、.jar、.pyc、.wasm)、資料庫(.db、.sqlite)、設計檔(.psd、.fig)、字型(.ttf、.woff2) |
| 未通過文字檢查 | 前 8 KiB 含 NUL 位元組或不是合法 UTF-8,或檔案為空 |
略過的檔案仍會記進快照,在檔案變動前不會重新檢查。