概要
search_notes はノート探索の深い階層です。必須のキーワードを受け取り、一致したノートに主要ドキュメント(ワンページャー、カスタム)を付与して返します。LLM が、単に一致するノートを見るだけでなく、トピックの背後にあるコンテキスト(決定事項、アクションアイテム、結論)を理解する必要があるときに使用してください。
軽量なメタデータのみの一覧表示(例: 「フォルダ X にはどのノートがありますか」)には、代わりに list_notes を使用してください。
主なユースケース:
- 「OKR Q2 についてチームは何を決めたのか?」 — トピックで検索し、ドキュメントをインラインで読む。
- 「この決定のソースノートはどこか?」 — キーワードでノートを見つけ、ドキュメントがコンテキストを与える。
- 「네이버 について書いたものをすべて見せて」 — 韓国語のキーワード検索をコンテンツ付きで。
- キーワード必須。結果は全文検索の関連度(同点の場合は
createdAtの降順)で並べ替えられます。 - 一致した各ノートには、主要ドキュメント(ワンページャー、カスタム)がインラインで付きます。
- ドキュメントのコンテンツから HTML を除去します。5,000 文字を超えるドキュメントは打ち切られ、フラグが付きます。
- 検索インデックスが利用できない場合の優雅な縮退。
workspace-scoped key で呼び出すと結果が狭まります。 workspace-scoped key は全メンバーに共有されたフォルダのノートのみを検索するため、個人フォルダのノートは keyword が一致しても結果から外れます。個人フォルダのノートまで検索する必要がある場合は user-scoped key をご利用ください(システムキーが読み取るノートの範囲)。
パラメータ
keyword (required)
検索語です。サーバー側でトークン化され、韓国語テキストは形態素解析されます(例:네이버 → [네, 버])。空または空白のみのキーワードは 400 を返します。
キーワード検索は、user-scoped と workspace-scoped のどちらの API key も受け付けます。workspaceGuid を省略するとアクセスできるすべてのワークスペースを横断して検索します — workspace-scoped key は自動的に自身のワークスペースを検索します。特定のワークスペースに検索を限定するには、明示的な workspaceGuid(パラメータを参照)を渡してください。
filter.folderId (optional)
list_notes と同じ意味です。再帰的なフォルダ範囲で、サーバー側で認可されます。
pagination (optional)
{ cursor, size }。デフォルト size: 50、最大 200。この上限は、結果あたりのコストが高いこと(各ノートがドキュメントを伴うこと)を反映しています。
レスポンス形式
成功レスポンス
縮退レスポンス
検索インデックスが利用できない場合、レスポンスはdegraded=true を設定し、空の notes 配列を返します。
degradedReason は次のいずれかです。
search_index_unavailable— この環境では検索インデックスが無効になっています。search_index_degraded— クエリの途中で検索インデックスがエラーを投げました。
使用例
例 1: トピック検索
リクエスト:例 2: フォルダ限定の韓国語キーワード
リクエスト:455765(とその子孫)の中だけで 네이버 を検索します。韓国語の形態素解析はサーバー側で実行されます。
例 3: 日付で区切った深い検索
リクエスト:ベストプラクティス
Start with list_notes, switch to search_notes when content is needed
Start with list_notes, switch to search_notes when content is needed
まず
list_notes を使って、どのノートが一致するかを見つけてください。LLM が答えるためにドキュメントの内容をなお必要とする場合は、同じキーワードで search_notes に切り替えます。これが最も安価な段階的開示のパスです。Use folderId to narrow the search universe
Use folderId to narrow the search universe
フォルダ限定の検索は、関連度の空間が小さくなるため、より高速で、より良くランク付けされた結果を返します。まず
list_notes(filter.folderId) と組み合わせてフォルダ候補を見つけてください。Don't loop on `nextCursor`
Don't loop on `nextCursor`
深い検索 endpoint は現在
nextCursor: null を返します。30 件の結果で足りない場合は、ページネーションするのではなく、キーワードを絞り込む(より具体的に)か、folderId/dateRange で範囲を限定してください。Watch the `degraded` flag
Watch the `degraded` flag
degraded=true のレスポンスは正直です。検索インデックスが実行できなかったのです。空の notes 配列を「一致なし」と扱わないでください。代わりに、リトライのタイミングを適切に計れるよう、縮退をユーザー/LLM に提示してください。