AI Search は公式のネイティブプラグインで、公開済みのコンテンツを Cloudflare AI Search のインスタンスにインデックス化し、サイトに検索結果を提供します。コンテンツが変更されると、インデックスも最新の状態に保たれます。Cloudflare Workers と Node.js の両方で動作します。
インストール
npm からパッケージをインストールします。
pnpm add @emdash-cms/plugin-ai-search
astro.config.mjs の plugins に aiSearch() を追加します。
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { aiSearch } from "@emdash-cms/plugin-ai-search";
export default defineConfig({
integrations: [
emdash({
plugins: [aiSearch()],
}),
],
});
次に、Workers バインディングまたは API トークンを使って、プラグインを AI Search に接続します。サイトに両方が設定されている場合、プラグインはバインディングを使用します。
Workers バインディングで接続する
Cloudflare Workers では、wrangler.jsonc に AI Search 名前空間バインディングを追加します。
{
"ai_search_namespaces": [{ "binding": "AI_SEARCH", "namespace": "default" }],
}
API トークンで接続する
どのプラットフォームでも、プラグインは Cloudflare REST API 経由で AI Search にアクセスできます。そのためには、Cloudflare のアカウント ID と、アカウント権限 AI Search Edit および AI Search Run を持つ API トークンが必要です。Cloudflare ダッシュボードの Manage account > Account API tokens で、アカウント API トークンを作成してください。ユーザートークンとは異なり、作成した人がアカウントを離れても使い続けられます。同じ権限を持つユーザートークンでも動作します。
認証情報を環境変数として設定します。
EMDASH_AI_SEARCH_ACCOUNT_ID=your-account-id
EMDASH_AI_SEARCH_API_TOKEN=your-api-token
または、管理画面のプラグイン設定ページで入力することもできます。EmDash はトークンを暗号化して保存するため、そこで保存するには EMDASH_ENCRYPTION_KEY が必要です。詳しくは Secrets を参照してください。環境変数は管理画面で保存した値より優先され、管理画面には設定済みであることだけが表示され、値は表示されません。
プラグインはアカウントの default 名前空間を使用します。別の名前空間を使うには、EMDASH_AI_SEARCH_NAMESPACE を設定してください。プラグインはインスタンスをその名前空間内に保持するため、インデックスを構築する前に名前空間を決めておいてください。後から変更すると、設定ページにインスタンスが見つからないと表示されます。その場合は Edit setup を選んでセットアップを完了すると、インスタンスが作成されてインデックスが再構築されます。設定ページでアカウントを変更した場合は、これが自動的に行われます。
API トークンを使う場合、インデックス作成、管理画面、そして訪問者のすべての検索で Cloudflare API リクエストが発生し、Cloudflare はトークンごとのリクエスト数を 5 分あたり 1,200 回に制限しています。Workers バインディングはこの制限の対象外なので、Workers 上のアクセスの多いサイトではバインディングを使用してください。
制限内に収めるため、インデックス作成は制限の最大半分までしか使用せず、そのためインデックスの構築には 7,000 レコードあたり約 1 時間かかります。また、各 EmDash プロセスでは、訪問者 1 人につき 1 分あたり 30 回まで検索でき、IP アドレスごとにカウントされます。リバースプロキシの背後にあるセルフホストのサイトでは、検索制限を有効にするために trustedProxyHeaders を設定する必要があります。信頼できるクライアント IP がない場合、検索は制限されません。
オプション
| オプション | デフォルト | 説明 |
|---|---|---|
binding | AI_SEARCH | wrangler.jsonc 内の ai_search_namespaces バインディングの名前。 |
instance | emdash | プラグインがその名前空間内に作成して所有する AI Search インスタンス。 |
環境変数
| 変数 | 説明 |
|---|---|
EMDASH_AI_SEARCH_ACCOUNT_ID | REST API 用の Cloudflare アカウント ID。 |
EMDASH_AI_SEARCH_API_TOKEN | AI Search Edit と AI Search Run の権限を持つ Cloudflare API トークン。 |
EMDASH_AI_SEARCH_NAMESPACE | REST API 用の AI Search 名前空間。デフォルトは default です。 |
Workers バインディングが利用できる場合、プラグインはこれらの変数を無視します。
サイトに検索を追加する
AiSearch コンポーネントをレイアウトに追加します。検索ボタンを表示して検索モーダルを開きます。Cmd/Ctrl+K でも開けるため、1 ページにつき 1 回だけ表示してください。
---
import { AiSearch } from "@emdash-cms/plugin-ai-search/astro";
---
<AiSearch placeholder="Search content" />
インデックスを構築する
デプロイ後、管理画面で AI Search を開きます。プラグインがまだ AI Search に接続できない場合は、アカウント ID と API トークンの入力を求められます。続いてセットアップウィザードで、インデックス化するコンテンツを選び、各ソースの結果アドレスの例が表示され、Build index を選択するとインデックスが構築されます。構築が始まると検索が利用可能になり、ドキュメントがインデックス化されるにつれて結果が表示されていきます。その後のコンテンツ変更は、インデックスに自動的に反映されます。