RAG・検索基盤

権限考慮検索とは|検索の後に絞ったら漏れは0件、代わりに4人全員が10件に届かなかった

権限考慮検索とは何をする構成なのか絞る場所で何が変わるのか前に絞ると何が要るのか

社内文書をAIに探させるとき、その利用者が見てよい文書だけを対象にする必要があります。ここで問題になるのが、どの段階で絞るかです。

実際に測ったところ、絞らない構成では延べ24件が見てはいけない相手に返りました。検索の後で絞ると漏れは0件ですが、4人全員が10件に届きません

この記事の要点

  • 絞らないと、延べ24件が見てはいけない相手に返る
  • 検索の後に絞ると漏れは0件だが、4人全員が10件に届かない
  • 人事の利用者は10件中3件しか残らなかった
  • 検索の前に絞れば漏れ0件で10件そろう

検索の後に絞ったら漏れは0件、代わりに4人全員が10件に届かなかった

文書400件・利用者4人で実際に測りました。絞らないと延べ24件が漏れ、後で絞ると全員が件数不足になります。

権限考慮検索で絞る場所を変えると何が起きるのかを、実際に測りました。用意したのは4部署にまたがる文書400件と、部署の違う利用者4人です。

検索も判定も本当に実行しています。文書ごとの閲覧範囲と、検索の点の付け方はコードに書いてあり、そこを変えれば結果も変わります。

javascript
const visible = (doc, user) => doc.open || doc.dept === user;

// 1) 絞らない
const none = ranked.slice(0, K2);
// 2) 検索の後に絞る(上位K件を取ってから落とす)
const after = ranked.slice(0, K2).filter((d) => visible(d, u));
// 3) 検索の前に絞る(見える文書だけを対象にする)
const before = ranked.filter((d) => visible(d, u)).slice(0, K2);
text
絞る場所              利用者    返した件数  見えてはいけない件数
絞らない                営業             10件                   5件
検索の後に絞る             営業              5件                   0件
検索の前に絞る             営業             10件                   0件

絞らない                人事             10件                   7件
検索の後に絞る             人事              3件                   0件
検索の前に絞る             人事             10件                   0件

絞らない場合の、見えてはいけない文書の延べ件数: 24件
検索の後に絞った場合に、10件に足りなかった利用者: 4 / 4人

人事の行が分かりやすいはずです。絞らないと10件中7件が見てはいけない文書で、後で絞ると残るのは3件になります。

絞らない構成は静かに漏れる

延べ24件という数字は、4人ぶんの合計です。1人あたり平均6件が、見てはいけない相手に返っています

検索としては成功しています。エラーも出ません。返ってきた10件をその人が見てよいかは、検索の結果には表れません

後で絞ると件数が足りない

後で絞れば漏れは止まります。ところが4人全員が10件に届きませんでした。3件から5件です。

しかも足りない度合いは人によって違います。見える文書が少ない人ほど、残る件数も少なくなります。同じ構造の話はフィルタ付き検索の記事で扱っています。

前で絞れば両立する

3行目が答えです。見える文書だけを対象にして上位10件を取れば、漏れ0件で件数もそろいます

ただし、これには利用者ごとに検索の対象を変える仕組みが要ります。pgvectorでも、近似の索引では絞り込みが索引を走査した後に当てられるため、結果が少なくなりうると明記されています。

漏れを止めるか、件数をそろえるか。絞る場所で決まる。

絞らない(人事の利用者)見てよい文書3見てはいけない文書710件検索の後に絞る(人事の利用者)33件検索の前に絞る(人事の利用者)1010件文書400件・上位10件を返す設定での実測。絞らない場合の漏れは4人合計で24件だった。
図1 ── 絞る場所ごとの、返した件数と漏れ
出典pgvector/pgvector README2026-08-18 確認
With approximate indexes, queries with filtering can return less results since filtering is applied after the index is scanned.
原文pgvector/pgvector README この内容の有効期限2027-02-18

権限考慮検索とは何をする構成なのか

検索の対象を、利用者ごとに見える範囲へ限る構成です。文書側に閲覧範囲の情報を持たせるところから始まります。

権限考慮検索は、その利用者が見てよい文書だけを検索の対象にする構成です。誰が引いているかによって結果が変わります。

そろえるもの

  1. 文書ごとの閲覧範囲。誰が見てよいかの情報
  2. 利用者の所属や役割。引く側の情報
  3. 検索の対象を変える仕組み。索引の持ち方に効く
  4. 答えの段での注意書き。これでは止まらない

4番目に注意してください。「見てよい文書だけを使え」と指示に書いても、渡してしまった文書は取り消せません

索引の持ち方が変わる

検索の前に絞るには、索引側の対応が要ります。pgvectorでも、条件付きの検索に索引を効かせる方法はいくつかあるとされ、絞り込む列に索引を作る、条件を含んだ索引を作る、値で分割する、といった選択肢が挙げられています。

部署が4つなら、部署ごとに索引を持てます。利用者ごとに範囲が違う構成では、分割のほうが現実的になります。

何をもって見てよいとするか

実装の前に決めることがあります。閲覧範囲を部署で決めるのか、役職で決めるのか、文書ごとの指定で決めるのかです。

この設計は検索の話ではありません。組織の話です。権限を引き継がない構成で何が起きるかはCopilot Studioの記事で扱っています。

余談 2人で同じ問いを投げる

確かめ方は簡単です。部署の違う2人で、まったく同じ問いを投げて結果を比べる。答えが同じなら、権限が効いていません。導入前に1度やっておけば済みます。

出典pgvector/pgvector README2026-08-18 確認
There are a few ways to index nearest neighbor queries with a WHERE clause.
原文pgvector/pgvector README この内容の有効期限2027-02-18

権限で絞ったあとの運用で見るもの

返した件数を利用者ごとに記録します。足りない状態はエラーにならないので、数えないと分かりません。

権限考慮検索を入れた後に見るべきなのは、返した件数が要求どおりだったかです。前の節では、後で絞る構成で4人全員が不足しました。

件数を利用者ごとに記録する

足りない状態はエラーになりません。10件要求して3件返っても、検索としては成功です。

しかも足りる人と足りない人が混ざります。全体の平均で見ると、見える文書の多い人に薄められます。利用者ごとに記録してください。

足りなければ追加で走査する

製品側の対処もあります。pgvectorでは、行が足りない場合に索引をさらに走査する繰り返しの走査を有効にできるとされています。

十分な件数が集まるまで走査を続ける形です。見える文書が少ない利用者ほど、走査が長くなります。応答時間が人によって変わる点は押さえておいてください。

権限は変わる

運用で見落とされやすいのが、権限そのものが変わることです。異動があれば、その人に見える文書の範囲が変わります。

索引に権限を焼き込んでいる構成では、変更のたびに作り直しが要ります。誰がいつ反映するかを決めておかないと、古い権限で引き続けます

件数が足りなくてもエラーにならない。数えないと分からない。

充足 2 / 4検索の前に権限で絞っている後で絞ると4人全員が10件に届かず、人事の利用者は3件だった返した件数を利用者ごとに記録している足りない状態はエラーにならない。平均で見ると薄まる権限を絞らずに検索している4人合計で延べ24件が、見てはいけない相手に返った権限の変更を反映する担当を決めていない異動があっても古い権限で引き続けることになる文書400件・利用者4人での実測にもとづく。前で絞れば漏れ0件で10件そろった。
図2 ── 権限考慮検索の点検項目
出典pgvector/pgvector README2026-08-18 確認
For more rows, enable iterative index scans , which will automatically scan more of the index when needed.
原文pgvector/pgvector README この内容の有効期限2027-02-18

よくある質問

なぜ後で絞ると件数が減るのですか
上位10件のうち、その人が見てよい文書だけが残るためです。この計測では、人事の利用者に残ったのは3件でした。
多めに取ってから絞ればよいのでは
緩和はできます。ただし何件取れば足りるかは利用者ごとに違います。見える文書が少ない人ほど、多く取る必要があります。
前に絞るには何が要りますか
利用者ごとに検索の対象を変える仕組みです。索引に権限の属性を持たせるか、権限ごとに索引を分けることになります。
漏れたことは分かりますか
分かりません。検索としては成功し、10件が返ります。返った文書をその人が見てよいかは、検索の結果には表れません。

まとめ

  • 権限考慮検索は利用者ごとに見える範囲で検索する構成
  • 絞らないと延べ24件が漏れる
  • 後で絞ると漏れ0件だが4人全員が件数不足
  • 前で絞れば漏れ0件で件数もそろう

今日から始められること

  1. 文書ごとに、誰が見てよいかの情報を持っているか確かめる
  2. 検索が利用者ごとに対象を変えているかを確かめる
  3. 変えていないなら、返った件数と内訳を記録する
  4. 部署の違う2人で同じ問いを投げ、結果を比べる

実務で組んだ権限考慮検索のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る