FlexSearch
快速且輕量的文件搜尋
設定
npm install flexsearchnpm install @types/flexsearch -D從來源建立
從來源物件建立伺服器。
import { source } from '@/lib/source';
import { flexsearchFromSource } from 'fumadocs-core/search/flexsearch';
export const { GET } = flexsearchFromSource(source);從搜尋索引建立
從搜尋索引建立伺服器,每個索引都需要一個 structuredData 欄位。
這個欄位通常由您的內容來源 (例如 Fumadocs MDX) 提供。您也可以使用 Remark Structure 外掛,從 Markdown/MDX 文件中擷取。
在您的搜尋路由中改用此伺服器,取代 flexsearchFromSource():
import { source } from '@/lib/source';
import { flexsearch } from 'fumadocs-core/search/flexsearch';
const server = flexsearch({
indexes: source.getPages().map((page) => ({
title: page.data.title!,
description: page.data.description,
url: page.url,
id: page.url,
structuredData: page.data.structuredData,
})),
});搜尋文件
您可以透過以下方式搜尋文件:
- Fumadocs UI:已內建支援,詳情請參閱搜尋 UI。
- 搜尋用戶端:
import { } from 'fumadocs-core/search/client';
const { , , , } = ();屬性
型別
設定
標籤篩選
支援依標籤篩選結果,適合用來實作類似本文件網站的多文件架構。
import { source } from '@/lib/source';
import { flexsearchFromSource } from 'fumadocs-core/search/flexsearch';
const server = flexsearchFromSource(source, {
buildIndex(page) {
return {
title: page.data.title!,
description: page.data.description,
url: page.url,
id: page.url,
structuredData: page.data.structuredData,
// 填入您需要的值,例如 page.slugs[0]
tag: '<value>',
};
},
});並更新您的搜尋用戶端:
- Fumadocs UI:在搜尋 UI 中設定標籤篩選。
- 搜尋用戶端:將標籤傳入
useFetchSearch()。
import { useFetchSearch } from 'fumadocs-core/search/client';
const { search, onSearchChange, isLoading, data } = useFetchSearch({
tag: '<value>',
});靜態模式
若要在靜態網站中使用,請使用搜尋伺服器提供的 staticGET,並將路由設為靜態或預先算繪。
import { source } from '@/lib/source';
import { flexsearchFromSource } from 'fumadocs-core/search/flexsearch';
// 靜態快取
export const revalidate = false;
export const { staticGET: GET } = flexsearchFromSource(source);flexsearch() 也提供 staticGET。
接著更新您的搜尋用戶端:
-
Fumadocs UI:在搜尋 UI 中使用靜態用戶端。
-
搜尋用戶端:更換您的用戶端轉接器。
import { useFlexsearchStatic } from 'fumadocs-core/search/client/flexsearch-static'; const { search, onSearchChange, isLoading, data } = useFlexsearchStatic({ // 選用:傳入標籤與語系 tag, });屬性
型別
請注意
靜態搜尋需要用戶端下載匯出的搜尋索引。 對於大型文件網站而言,這可能會耗費大量資源。
遇到這類情況,建議您改用 Orama Cloud 或 Algolia 等雲端解決方案。
國際化
Flexsearch 不需要額外設定即可支援其他語言,但您可以為每個語系指定 Flexsearch 選項,讓搜尋結果更準確。
import { source } from '@/lib/source';
import { flexsearchFromSource } from 'fumadocs-core/search/flexsearch';
import { Charset } from 'flexsearch';
const server = flexsearchFromSource(source, {
localeMap: {
// [locale]:Flexsearch 選項
jp: { encoder: Charset.CJK },
},
});How is this guide?
最後更新於
