Skip to content

feat(search): add document path-prefix filter #252

Description

@lipluscodex

目的

search に任意の path_prefix structured filter を追加し、既存リポジトリ内の専用ディレクトリを独立した文書検索母集合として扱えるようにする。Neuron Graph RAG との再現可能な検索性能比較で、通常文書を候補へ混入させず固定 Markdown コーパスだけを検索できることを直接の利用例とする。

前提

  • doc_path は doc vector metadata と D1 search_docs.doc_path の両方へ既に格納されている。
  • Cloudflare Vectorize の metadata index は1 indexあたり最大10 propertyで、現構成は10枠を使用済み。assignee_1 は将来の pre-filter 用に保存されているだけで、現行の assignee filter は post-filter である。公式上限: https://developers.cloudflare.com/vectorize/platform/limits/
  • Cloudflare Vectorize は string metadata の $gte / $lt range による prefix search を提供する。ただし対象 property の metadata index が必要で、index 作成前に upsert された vector は再 upsert しない限りその index に含まれない。公式仕様: https://developers.cloudflare.com/vectorize/reference/metadata-filtering/
  • sparse 側は search_docs.doc_path の range predicate、scan 側は DocRecord.path の prefix 判定で同じ母集合を選べる。

制約

  • 初期契約では path_prefixtype: "doc" と組み合わせた場合だけ有効とする。その他の type、type: "all"、type 省略との併用は入力エラーにする。
  • 値は / から始まらない repository-relative directory prefix とし、末尾 / を必須にする。空文字、空 segment、. / .. path segment、backslash、NUL を拒否する。
  • Vectorize string metadata index が先頭 64 bytes だけを索引する制約に合わせ、UTF-8 で 64 bytes 以下にする。
  • metadata index の10枠上限を守るため、未使用の将来用 assignee_1 index を削除して doc_path index を作る。vector metadata 自体の assignee_1 は保持し、現行の assignee post-filter は変えない。
  • 末尾 / の次の文字境界を upper bound とし、dense / sparse 側は doc_path >= prefix AND doc_path < upperBound の同じ半開区間、scan 側は同じ範囲を store query へ押し下げたうえで startsWith(prefix) を最終確認に用いる。結果末尾だけの post-filter にして候補枯れを起こしてはならない。
  • fetch mode (vector_ids) は既存どおり全 metadata filter を無視する。
  • Worker と stdio bridge の tool schema、英日要件文書、導入手順を同じ PR で同期する。
  • 既存の検索結果と filter 未指定時の動作を変えない。
  • 新規リポジトリは作成しない。

対象ファイル

  • src/mcp.ts: 入力契約、dense filter、各 mode への引き渡し、説明文
  • src/path-prefix.ts: validation と共通の半開区間
  • src/fts.ts: sparse prefix pre-filter と filter 不成立 probe
  • src/store.ts / src/scan.ts: scan prefix の store query pushdown と最終確認
  • migrations/0007_doc_path_prefix.sql: repository / doc type / path range probe index
  • src/*.test.ts: 入力契約・search / scan 回帰
  • mcp-server/server/tools.js と bridge schema tests: static schema mirror
  • docs/0-requirements.md / docs/0-requirements.ja.md: structured filter の規範
  • docs/installation.md / docs/installation.ja.md: doc_path metadata index と既存 vector の再 index 手順
  • README.md / README.ja.md: tool parameter 一覧

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能review-pending実装フェーズ完了。orchestration (brake eval / review / merge / close) 待ち

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions