Fumadocs

Orama 云

与 Orama Cloud 集成

首先,在 Orama Cloud 上创建一个账户。

🌐 To begin, create an account on Orama Cloud.

REST API

REST API 集成需要你上传索引的文档。

🌐 REST API integration requires your docs to upload the indexes.

  1. 在 Orama Cloud 仪表板上使用 REST API 数据源创建一个新项目。

    将你的凭据存储在环境变量中,例如:

    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. 通过预渲染静态路由导出搜索索引。

    lib/export-search-indexes.ts
    import { source } from '@/lib/source';
    import type { OramaDocument } from 'fumadocs-core/search/orama-cloud';
    
    export async function exportSearchIndexes() {
      return source.getPages().map((page) => {
        return {
          id: page.url,
          structured: page.data.structuredData,
          url: page.url,
          title: page.data.title,
          description: page.data.description,
        } satisfies OramaDocument;
      });
    }
    app/static.json/route.ts
    import { exportSearchIndexes } from '@/lib/export-search-indexes';
    
    export const revalidate = false;
    
    export async function GET() {
      return Response.json(await exportSearchIndexes());
    }
  3. 创建一个脚本来同步搜索索引。

    scripts/sync-content.ts
    import { sync, type OramaDocument } from 'fumadocs-core/search/orama-cloud';
    import * as fs from 'node:fs/promises';
    import { OramaCloud } from '@orama/core';
    
    // the path of pre-rendered `static.json`, choose one according to your React framework
    const filePath = {
      next: '.next/server/app/static.json.body',
      'tanstack-start': '.output/public/static.json',
      'react-router': 'build/client/static.json',
      waku: 'dist/public/static.json',
    }['next'];
    
    async function main() {
      const orama = new OramaCloud({
        projectId: process.env.NEXT_PUBLIC_ORAMA_PROJECT_ID,
        apiKey: process.env.ORAMA_PRIVATE_API_KEY,
      });
    
      const content = await fs.readFile(filePath);
      const records = JSON.parse(content.toString()) as OramaDocument[];
    
      await sync(orama, {
        index: process.env.NEXT_PUBLIC_ORAMA_DATASOURCE_ID,
        documents: records,
      });
    
      console.log(`search updated: ${records.length} records`);
    }
    
    void main();
  4. 在生产构建后运行脚本,确保环境变量可用(例如,Bun 从 .env 文件中读取):

    package.json
    {
      "scripts": {
        "build": "... && bun scripts/sync-content.ts"
      }
    }

搜索客户

🌐 Search Client

要在客户端搜索文档,请考虑:

🌐 To search documents on the client side, consider:

  • 使用 Fumadocs 用户界面搜索对话框

  • 使用 Fumadocs 内置钩子的自定义搜索界面:

    import { useDocsSearch } from 'fumadocs-core/search/client';
    import { OramaCloud } from '@orama/core';
    
    const client = new OramaCloud({
      projectId: process.env.NEXT_PUBLIC_ORAMA_PROJECT_ID,
      apiKey: process.env.NEXT_PUBLIC_ORAMA_API_KEY,
    });
    
    const { search, setSearch, query } = useDocsSearch({
      type: 'orama-cloud',
      client,
      params: {
        // optional search params
      },
    });
  • 直接使用他们的搜索客户端。

网络爬虫

🌐 Web Crawler

  1. 从仪表板创建一个爬虫数据源,并使用“文档”预设正确配置它。
  2. 从仪表板复制凭证。

搜索客户

🌐 Search Client

与 REST API 集成相同,但请确保将 index 设置为 crawler

🌐 Same as REST API integration, but make sure to set index to crawler.

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

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

const { search, setSearch, query } = useDocsSearch({
  type: 'orama-cloud',
  index: 'crawler',
  client,
  params: {
    // optional search params
  },
});

Fumadocs 的界面也是一样的。

🌐 It's same for Fumadocs UI.

Last updated on

On this page