跳至內容
Fumadocs

Orama Cloud

整合 Orama Cloud

首先,請在 Orama Cloud 上建立帳號。

REST API

使用 REST API 整合時,您的文件網站需要自行上傳索引。

  1. 在 Orama Cloud 主控台建立一個以 REST API 作為資料來源的新專案。

    將您的認證資訊儲存在 .env.local 中,例如 (在 Vite 框架上 NEXT_PUBLIC_ 改為 VITE_,在 Astro 上則為 PUBLIC_) :

    NEXT_PUBLIC_ORAMA_DATASOURCE_ID="Rest API data source ID"
    NEXT_PUBLIC_ORAMA_PROJECT_ID="project ID"
    NEXT_PUBLIC_ORAMA_API_KEY="public API key"
    
    ORAMA_PRIVATE_API_KEY="private API key"
  2. 預先算繪 static.json 路由,以便在建置時匯出搜尋索引,並在每次建置後透過指令碼將索引同步至 Orama Cloud:

    app/static.json/route.ts
    import { source } from '@/lib/source';
    import { toDocuments } from 'fumadocs-core/search/orama-cloud';
    
    export const revalidate = false;
    
    export async function GET() {
      return Response.json(await toDocuments(source));
    }
    
    scripts/sync-content.ts
    import * as fs from 'node:fs/promises';
    import { type OramaDocument as DocumentRecord, sync } from 'fumadocs-core/search/orama-cloud';
    import { OramaCloud } from '@orama/core';
    
    // Next.js writes it under `route-cache` when built with an adapter, like on Vercel
    const [file] = await Array.fromAsync(fs.glob('.next/server/{app,route-cache/*/*/$}/static.json.body'));
    const records = JSON.parse(await fs.readFile(file, 'utf-8')) as DocumentRecord[];
    
    const orama = new OramaCloud({
      projectId: process.env.NEXT_PUBLIC_ORAMA_PROJECT_ID!,
      apiKey: process.env.ORAMA_PRIVATE_API_KEY!,
    });
    
    await sync(orama, {
      index: process.env.NEXT_PUBLIC_ORAMA_DATASOURCE_ID!,
      documents: records,
    });
    
    console.log(`search updated: ${records.length} records`);
    
    package.json
    {
      "scripts": {
        "build": "next build && node --env-file-if-exists=.env.local scripts/sync-content.ts"
      }
    }

    build 指令碼會在每次建置時進行同步,因此請在您的部署平台上設定相同的變數。

搜尋用戶端

若要在用戶端搜尋文件,可以考慮以下方式:

  • 使用 Fumadocs UI 搜尋對話方塊。

  • 使用 Fumadocs 內建的 hook 自訂搜尋 UI:

    import { useOramaCloudSearch } from 'fumadocs-core/search/client';
    import { OramaCloud } from '@orama/core';
    
    const orama = new OramaCloud({
      projectId: process.env.NEXT_PUBLIC_ORAMA_PROJECT_ID,
      apiKey: process.env.NEXT_PUBLIC_ORAMA_API_KEY,
    });
    
    const params = {
      // 選用的搜尋參數
    };
    
    const { search, onSearchChange, isLoading, data } = useOramaCloudSearch({
      client: orama,
      params,
    });
  • 直接使用 Orama 提供的搜尋用戶端。

網路爬蟲

  1. 在主控台中建立 Crawler 資料來源,並套用「Documentation」預設範本,完成正確設定。
  2. 從主控台複製認證資訊。

搜尋用戶端

設定方式與 REST API 整合相同,但請務必將 index 設為 crawler。

import { useOramaCloudSearch } from 'fumadocs-core/search/client';
import { OramaCloud } from '@orama/core';

const orama = new OramaCloud({
  projectId: '<project id>',
  apiKey: '<read only api key>',
});

const params = {
  // 選用的搜尋參數
};

const { search, onSearchChange, isLoading, data } = useOramaCloudSearch({
  index: 'crawler',
  client: orama,
  params,
});

Fumadocs UI 也是如此。

How is this guide?

最後更新於