テック技報最新号へ →
インフラ

Cloudflare AI Search: 日本語のキーワード検索は keyword_tokenizer: "trigram" にする

AI Search のキーワード検索(BM25)で日本語・中国語・韓国語の質問文がヒットするようになった。ただし既定の porter ではなく trigram トークナイザーを選んでおく必要がある。

@CFchangelog · 投稿 2026-10-16
#infra#cloudflare#ai-search#full-text-search#japanese#rag

どんな問題?

  • 既定の porter はスペースと句読点で単語を切る。日本語は単語の間にスペースがないので、経費精算の締め日はいつですか? のような質問は 1 つの長い完全一致フレーズ扱いになり、キーワード検索の結果がほぼ 0 件になっていた
  • 2026-10-16 の更新で、trigram(3 文字ずつずらした窓)を使えば、自然文の質問でも本文中の 3 文字列と照合されるようになった
  • ハイブリッド検索(ベクトル + キーワード)は新規インスタンスの既定。ベクトル側は日本語でも動くが、キーワード側が空振りしていると固有名詞や型番のような「完全一致で拾いたい語」が弱くなる

設定

インスタンス作成時(または更新時)に indexing_options.keyword_tokenizer を指定する。

ts
const instance = await env.AI_SEARCH.create({
  id: "docs-ja",
  index_method: { vector: true, keyword: true }, // ハイブリッド
  fusion_method: "rrf",
  indexing_options: { keyword_tokenizer: "trigram" },
  retrieval_options: { keyword_match_mode: "or" }, // and = 精度重視 / or = 再現率重視
});
値既定向いている内容
porter○英語などスペース区切りの自然文(語幹処理で "running" が "run" に一致)
trigram日本語・中国語・韓国語、コード("config" が "configuration" に一致)

注意点

  • トークナイザーを変えると全件再インデックスになる。件数が多いインスタンスは時間と取り込み量を見込んでおく
  • trigram では 3 文字未満の語は単独では一致しない(「AI」「DB」「締日」のような 2 文字語)。短い語が大事なら、ベクトル検索との併用(ハイブリッド)を前提にする
  • AI Search は 2026-11-01 から従量課金が始まる(無料枠あり)。再インデックスのタイミングに注意
  • 日本語の全文検索を自前の SQLite / DuckDB でやる場合は SQLite / DuckDB: Vaporetto で日本語フルテキスト検索拡張を載せる も参照

出典

X の元の投稿を開く