跳轉至

站內搜尋

Zensical 內建完全在瀏覽器端運作的全文搜尋,不需要串接第三方服務,也沒有資料隱私上的疑慮。而且搜尋在離線時也能用,所以可以把整個網站打包成下載檔案給人使用。

全新的搜尋引擎

Zensical 的搜尋引擎是從零開始重寫的,不再使用 MkDocs/Material for MkDocs 的 Lunr 實作。目前搜尋介面還沒有多語系(只有英文),但這不影響多語系內容的搜尋。

基本設定

搜尋預設就是啟用的,不需要任何設定。設定檔裡即使寫 searchmaterial/search,設定的也都是 Zensical 這套內建搜尋。

可用的外掛設定只有兩個:

[project.plugins.search]
enabled = false                # 關閉搜尋
separator = '[\s​\-]'     # 切分搜尋詞的 JavaScript 正規表示式

separator 決定文字要在哪裡被切成搜尋詞。本教學網站使用的就是上面這個值(空白、零寬空格、連字號)。

不支援的 MkDocs 搜尋選項

langpipelinefieldsindexingjieba_dictjieba_dict_usermin_search_lengthprebuild_index 都會被忽略。搜尋語言改由 theme.language 決定,見 語言

搜尋相關功能旗標

[project.theme]
features = [
  "search.suggest",
  "search.highlight",
]
旗標 效果
search.suggest 輸入時顯示下一個字的建議
search.highlight 點進搜尋結果後,把頁面中所有符合的詞標亮

排除搜尋

排除整頁

在 front matter 加上 search.exclude,該頁就不會出現在搜尋索引:

---
search:
  exclude: true
---

# 頁面標題

排除某個段落

需要 attr_list。在標題後面加上 data-search-exclude該標題底下的內容就不會被索引:

# 頁面標題

## 段落 1

這個段落會被搜尋到。

## 段落 2 { data-search-exclude }

這個段落不會被搜尋到。

排除某個區塊

在行內或區塊元素後面,另起一行加上 { data-search-exclude }

這個區塊會被搜尋到。

這個區塊不會被搜尋到。
{ data-search-exclude }

總結

想做的事 設定
關閉搜尋 [project.plugins.search]enabled = false
調整斷詞規則 separator
輸入時提示 search.suggest
點進去後標亮關鍵字 search.highlight
整頁不被搜尋 front matter search.exclude: true
部分內容不被搜尋 { data-search-exclude }

參考資料