# Noterichワークスペースと高度な検索チュートリアル 情報過多が普通の時代において、デジタル情報を効率的に整理することは贅沢ではなく、必要不可欠です。**NoteRich**は、知識の管理と検索方法を変革する2つの強力な機能を提供します:**独立したマルチワークスペース**と**高度なセマンティック検索**です。 このチュートリアルでは、これらの機能を習得する手順を説明し、ニーズに応じて拡張可能な個人向け知識管理システムを構築する手助けをします。 --- ## 第1部:NoteRichのワークスペースの理解 ### ワークスペースとは何か? 人生のさまざまな領域に別々の物理的なノートを使うことを想像してみてください。仕事のプロジェクト用、個人的な日記用、研究ノート用などです。**NoteRich**のワークスペースは、デジタル環境にこのような整理性をもたらします。 NoteRichの各ワークスペースは、ノートを保管する**完全に独立したコンテナ**であり、以下の特徴を持っています: - 独立したノートデータベース - 別々の検索インデックス - ユニークなURLルーティング - 独立したAIメモコンテキスト ```mermaid graph TB subgraph "NoteRich Application" A[Workspace Router] --> B[Workspace: Work] A --> C[Workspace: Personal] A --> D[Workspace: Research] B --> B1[Notes Database] B --> B2[Search Index] B --> B3[AI Context] C --> C1[Notes Database] C --> C2[Search Index] C --> C3[AI Context] D --> D1[Notes Database] D --> D2[Search Index] D --> D3[AI Context] end style A fill:#000,stroke:#000,color:#fff style B fill:#fafafa,stroke:#eaeaea,color:#333 style C fill:#fafafa,stroke:#eaeaea,color:#333 style D fill:#fafafa,stroke:#eaeaea,color:#333 ``` ### なぜ複数のワークスペースを使用するのか? | シナリオ | メリット | |----------|---------| | **ワークライフの分離** | プロフェッショナルなノートを個人的な日記から完全に分離する | | **プロジェクトの分離** | 特定のクライアントや長期的なプロジェクト用にワークスペースを割り当てる | | **コンテキストの切り替え** | 気を散らすことなく異なる思考状態間を即座に切り替える | | **プライバシー管理** | 関連性のない内容を漏らさずに特定のワークスペースを共有する | | **パフォーマンスの最適化** | 大きな知識ベースが焦点を絞ったワークスペースに分けることで、高速に動作する | --- ## 第2部:ワークスペース間のナビゲーション ### ワークスペースルーターシステム NoteRichは、ユーザーのワークスペースの設定を記憶し、シームレスなナビゲーションを提供するインテリジェントなルーティングシステムを使用しています。 #### URLベースのワークスペース識別 各ワークスペースには、ブラウザのURLに反映されるユニークな識別子があります: ``` https://noterich.app/#workspace=work-projects https://noterich.app/#workspace=personal-journal https://noterich.app/#workspace=research-notes ``` ワークスペースIDは: - **URL-Safe**: 英数字、ハイフン、アンダースコアのみ許可 - **持続的**: ブラウザのローカルストレージに保存され、迅速な復元が可能 - **共有可能**: 特定のワークスペースへの直接リンクを共有できる #### ワークスペースの切り替えの仕組み NoteRichでワークスペースを切り替えると、以下のように処理が行われます: ```mermaid sequenceDiagram participant U as User participant R as Workspace Router participant L as LocalStorage participant W as Web Worker participant S as Search Engine participant D as IndexedDB U->>R: ワークスペース切り替えをクリック R->>L: ワークスペースIDを保存 R->>R: URLハッシュを更新 R->>W: ワークスペースIDをメッセージに送信 R->>S: 検索エンジンを再初期化 W->>D: データベース接続を切り替える S->>D: ワークスペース固有のインデックスを読み込む S-->>U: 検索準備完了通知 ``` ### ワークスペース名の命名規則 ワークスペースIDは、以下の条件を満たすものを選びます: - **記述的**: `marketing-q4-2025` ではなく `work1` - **一貫性がある**: 組織全体で命名規則を使用する - **将来に向けた**: 一時的な場合を除き、時間限定の名前を避ける (`project-phoenix` ではなく `temp-notes`) --- ## 第3部:高度な検索アーキテクチャ ### キーワードマッチングからセマンティック理解まで 従来の検索ツールは、正確なキーワードマッチングに依存しています。例えば「automobile」と検索しても、「car」を含むノートは見つかりません。NoteRichの高度な検索エンジンは、この制限を超えます。 #### 二重層検索システム NoteRichは、高度な二層検索アーキテクチャを採用しています: ```graphviz digraph SearchArchitecture { rankdir=TB; node [shape=box, style="rounded,filled", fillcolor="#fafafa", color="#eaeaea", fontname="Inter", fontsize=11]; edge [color="#d4d4d4", penwidth=1.5]; Query [label="User Query", fillcolor="#000", color="#000", fontcolor="#ffffff"]; subgraph cluster_processing { label = "Query Processing Pipeline"; style = "filled"; fillcolor = "#f9f9f9"; color = "#eaeaea"; Segment [label="Text Segmentation\n(Intl.Segmenter + Smart Fallback)"; Tokenize [label="Token Classification\n(Emails, URLs, Numbers, CJK)"; } subgraph cluster_search { label = "Parallel Search Execution"; style = "filled"; fillcolor = "#f9f9f9"; color = "#eaeaea"; Precise [label="Precise Match\ntitle_raw field\nWeight: 1.0"]; Fuzzy [label="Fuzzy Match\ntitle/content fields\nWeight: 0.8"]; } Merge [label="Score Merging & Ranking"]; Results [label="Final Results\nwith Highlights"]; Query -> Segment; Segment -> Tokenize; Tokenize -> Precise; Tokenize -> Fuzzy; Precise -> Merge; Fuzzy -> Merge; Merge -> Results; } ``` ### 高度なテキストセグメンテーション NoteRichの検索能力の基礎は、高度なテキストセグメンテーション機能にあります。 #### 多言語サポート 検索エンジンは、複数言語のテキストを自動的に検出し、セグメント化します: | 言語タイプ | 例 | セグメンテーション戦略 | |---------------|----------|----------------------| | **ラテン系** | 英語、スペイン語、フランス語 | 単語境界の検出 | | **CJK** | 中国語、日本語、韓国語 | Intl.Segmenterを使用した文字レベルのセグメント化 | | **混合** | コードスニペット、URL、メール | パターンベースの抽出 | | **数字** | 日付、価格、電話番号 | 特殊なパターン認識 | #### スマートなパターン認識 NoteRichは、セグメント化時に重要なパターンを認識し、保持します: - **メールアドレス**: `user@example.com` - **URL**: `https://example.com/path` - **電話番号**: `+1-555-123-4567` - **日付**: `2025-01-15`, `15/01/2025` - **通貨**: `$1,234.56`, `¥500` - **測定値**: `42℃`, `100km/h` これにより、`user@example.com`を検索すると、断片化された`user`、`example`、`com`の結果ではなく、正確なメールが見つかります。 --- ## 第4部:検索クエリのマスター ### クエリ構文と演算子 NoteRichは、正確な情報検索のための強力なクエリ構文をサポートしています。 #### 基本的な検索 クエリを入力するだけで、すべての索引されたコンテンツを検索できます: ``` Quarterly marketing strategy ``` これにより、タイトルと全文の両方を検索し、関連性に基づいて結果がランク付けされます。 #### 複数項目のOR検索 `|`記号を使用して、複数の代替項目を検索します: ``` Q4 planning | quarterly review | year-end summary ``` これにより、指定された項目の**いずれか**に一致するノートが返され、専門用語が異なるブレインストーミングセッションに最適です。 #### 重み付きスコアリングシステム NoteRichは、高度なスコアリングアルゴリズムを使用しています: ``` Match Type | Weight | Description --------------------|--------|------------------------------------- Precise (title_raw) | 1.0 | 元のタイトルでの正確な一致 Fuzzy (title) | 0.8 | テキスト分割後のタイトルでの一致 Fuzzy (content) | 0.8 | ノート内容での分割一致 ``` 結果は以下の基準で並べ替えられます: 1. **一致タイプの優先度**: 正確な一致はファジーな一致よりも高く評価される 2. **累積スコア**: 複数の項目の一致はスコアを増加させる 3. **サブクエリのカバー範囲**: より多くのサブクエリに一致するノートはより高く評価される ### 実際の検索例 #### 例1:会議ノートの検索 ```javascript // 検索クエリ "team standup | daily sync | morning meeting" // これらのフレーズのいずれかを含むノートが返され、 // 正確なタイトル一致が優先される ``` #### 例2:技術文書の検索 ```javascript // 検索クエリ "API endpoint authentication" // スマートにセグメント化し、以下を検索: // - "API"と"endpoint"および"authentication"を言及するノート // - "API"は単一のトークンとして保持 // - キャメルケースとスペースがある変形の両方で一致 ``` #### 例3:多言語コンテンツ ```javascript // 検索クエリ(英語と中国語の混合) "project roadmap 项目规划" // 両言語で同時にセグメント化し、検索する ``` ### 長文ドキュメントのナビゲーションアシスタント NoteRichの優れた機能の一つは、**巨大なドキュメント**を簡単に処理できる能力です。技術仕様、研究論文、包括的なプロジェクト文書を扱っている場合でも、長いドキュメント内の特定のコンテンツを簡単に見つけることができます。 #### ドキュメント内検索の仕組み 検索を行うと、NoteRichは一致するドキュメントを返すだけでなく、**正確なドキュメント内ナビゲーション**を提供します: ```mermaid sequenceDiagram participant User participant SearchEngine participant DocumentIndex participant Viewer User->>SearchEngine: 検索クエリを入力 SearchEngine->>DocumentIndex: すべてのワークスペースでクエリを検索 DocumentIndex-->>SearchEngine: 一致するドキュメントと位置情報を返す SearchEngine->>User: 一致数の表示 User->>User: 結果をクリック SearchEngine->>Viewer: 最初の一致箇所でドキュメントを開く Viewer->>User: ナビゲーションコントロールですべての一致箇所をハイライト User->>Viewer: 一致箇所間をジャンプ(次/前) Viewer->>User: 一致位置の表示(例:3 of 12) ``` #### 長文ドキュメントのための主要機能 1. **一致数の表示**: 各検索結果には、そのドキュメント内の一致数が表示されます(例:"Annual Report 2024 · 15 matches")、どのドキュメントが最も関連性の高い内容を含んでいるかを把握するのに役立ちます。 2. **即時一致へのジャンプ**: 検索結果をクリックすると、ドキュメントが開かれ、最初の一致箇所にスクロールされ、一致したテキストがハイライト表示されます。 3. **ナビゲーションコントロール**: キーボードショートカットやUIボタンを使用して、すべての一致箇所を切り替えることができます: - `F3` または `Cmd+G`: 次の一致箇所 - `Shift+F3` または `Shift+Cmd+G`: 前の一致箇所 - ビジュアルカウンターで現在の位置を示す(例:"一致箇所7 of 23") 4. **複数一致のハイライト**: 検索語のすべてのインスタンスが同時にハイライトされ、ドキュメント全体の分布の視覚的な概要が得られます。 5. **コンテキストの保持**: 一致箇所間を切り替える際、周囲のコンテキストが保持され、複雑なドキュメント内での位置を失うことがありません。 #### 実際の例:技術仕様のナビゲーション 50,000文字の技術仕様ドキュメントがあるとします。『authentication protocol』の言及がすべて見つかります: | ステップ | 操作 | 結果 | |------|--------|--------| | 1 | 検索バーに`authentication protocol`を入力 | "8 matches"と表示されるドキュメントが表示される | | 2 | 検索結果をクリック | ドキュメントが開かれ、最初の一致箇所にスクロールされる | | 3 | `F3`を7回押す | すべての8つのインスタンスを順に確認する | | 4 | ハイライトされた一致箇所を観察 | 語の分布の視覚的な概要が得られる | | 5 | 周囲のコンテキストを読む | 各ジャンプ時に完全な段落のコンテキストが保持される | この機能により、長いドキュメントを見知らぬテキストの壁から、いつでも数回のキーボード操作でアクセス可能なナビゲート可能な知識構造に変えることができます。 #### 長文ドキュメント検索のヒント - **特定のフレーズを使用する**: 長いクエリは、大きなドキュメントでの誤検出を減らす - **一致数を確認する**: 高い一致数は、一般的な用語が多いことを示唆する - **ワークスペースのフィルタリングと組み合わせる**: 特定のワークスペース内で検索を行い、範囲を絞り込む - **タイトルの精度を活用する**: セクションの見出しを明確に構造化して、正確なタイトルマッチングを実現する --- ## 第5部:大規模なパフォーマンス ### IndexedDBベースのストレージ NoteRichは、**IndexedDB**を利用して高速なローカルストレージを実現し、膨大な知識ベースでも即時検索を可能にします。 #### データベースアーキテクチャ 各ワークスペースは、独自のIndexedDBデータベースを保持しています: ``` noterich_note_database_{workspaceId} → Note metadata and content noterich_search_index_{workspaceId} → Search index documents ``` この分離により、以下が保証されます: - **高速な切り替え**: ワークスペース間のデータの読み込みがない - **独立したバックアップ**: 個々のワークスペースをエクスポートする - **スコープベースの権限制御**: 細かいアクセス制御 ### 增量インデックスの更新 全ての検索インデックスを毎回再構築するのではなく、NoteRichはインテリジェントな增量更新を使用します: ```mermaid graph LR A[Note Saved] --> B{Index Exists?} B -->|Yes| C[Timestampを比較する] B -->|No| D[Full Index Build] C -->|Newer| E[Indexエントリを更新する] C -->|Older| F[既にインデックス化されているをスキップする] E --> G[IndexedDBに保持する] D --> G F --> H[現在のインデックス] style A fill:#fafafa,stroke:#eaeaea style B fill:#000,stroke:#000,color:#fff style C fill:#fafafa,stroke:#eaeaea style D fill:#fafafa,stroke:#eaeaea style E fill:#fafafa,stroke:#eaeaea style F fill:#fafafa,stroke:#eaeaea style G fill:#fafafa,stroke:#eaeaea style H fill:#fafafa,stroke:#eaeaea ``` ### ベンチマークパフォーマンス 私たちのテストでは、大規模な場合でも優れたパフォーマンスが確認されました: ```echarts { "xAxis": { "type": "category", "data": ["1k Notes", "5k Notes", "10k Notes", "20k Notes", "50k Notes"], "axisLabel": { "color": "#666", "rotate": 0 } }, "yAxis": [ { "type": "value", "name": "Notes Count", "splitLine": { "lineStyle": { "color": "#f4f4f5" } }, "axisLabel": { "color": "#666" } }, { "type": "value", "name": "Latency (ms)", "splitLine": { "show": false }, "axisLabel": { "color": "#666" } } ], "series": [ { "name": "Notes Count", "data": [1000, 5000, 10000, 20000, 50000], "type": "bar", "itemStyle": { "color": "#eaeaea", "borderRadius": [4, 4, 0, 0] } }, { "name": "Search Latency", "data": [8, 12, 15, 22, 35], "type": "line", "yAxisIndex": 1, "smooth": true, "lineStyle": { "color": "#000", "width": 3 }, "itemStyle": { "color": "#000" }, "symbol": "circle", "symbolSize": 8 } ], "grid": { "left": "10%", "right": "10%", "bottom": "15%" }, "legend": { "data": ["Notes Count", "Search Latency"], "bottom": 0, "textStyle": { "color": "#666" } } } ``` **50,000ノート**でも、検索クエリは40ミリ秒未満で結果が返され、瞬きよりも速いです。 ### メモリ効率 検索エンジンは、最適化されたデータ構造を使用しています: - **FlexSearch Document Index**: 複数のフィールドを一つの効率的なインデックスに組み合わせる - **共有ノートマップ**: ノートメタデータのO(1)の検索を維持 - **バッチ処理**: インデックスの更新をブロック単位で行うことで、UIのブロックを防ぐ - **ローチャー loading**: ワークスペースを切り替える際に、必要に応じてインデックスを読み込む --- ## 第6部:ワークスペース管理のベストプラクティス ### 効果的なワークスペース構造の作成 #### 推奨されるパターン **パターン1:ドメインベースの分離** ``` ├── work-engineering ├── work-marketing ├── work-hr └── personal ``` **パターン2:プロジェクト中心の組織** ``` ├── project-alpha ├── project-beta ├── project-gamma └── archive-2024 ``` **パターン3:時間的組織** ``` ├── 2025-q1 ├── 2025-q2 ├── 2025-q3 └── 2025-q4 ``` ### 新しいワークスペースを作成するタイミング 以下の場合に新しいワークスペースを作成してください: ✅ **コンテキストの境界が明確な場合**: 異なるプロジェクト、チーム、生活領域 ✅ **アクセス制御が異なる必要がある場合**: 一部のノートは制限された共有が必要 ✅ **知識ベースが大きくなる場合**: 1つのワークスペースが10,000ノートを超える場合 ✅ **コラボレーションの要件が異なる場合**: 異なるトピックに対して異なる共同作業者が必要 ### 単一のワークスペースに留まるタイミング 以下の場合は、ノートを一緒に保持してください: ❌ **クロス参照が頻繁にある場合**: ノートが定期的に相互にリンクされる ❌ **検索が複数のトピックに及ぶ場合**: すべてのコンテンツを検索することが多い ❌ **セットアップのオーバーロードが利益を上回る場合**: 1,000ノート未満の小さなコレクションの場合 --- ## 第7部:高度なヒントとコツ ### ヒント1:ハッシュタグのセグメンテーションを活用する NoteRichは、検索時にハッシュタグを自動的にセグメント化します: ``` #machine-learning → "machine"と"learning"の両方で検索可能 ``` これにより、`#machine-learning`のノートを検索時に"machine"または"learning"で検索すると、該当するノートが見つかります。 ### ヒント2:検索時に添付ファイルのファイル名を使用する 添付ファイルのファイル名は、索引化され、検索可能です: ``` quarterly_report.pdf → "quarterly"と"report"と"pdf"の両方で検索可能 ``` ### ヒント3:数学的方程式も検索可能 方程式の内容は抽出され、索引化されます: ``` E = mc² → 索引化されたコンポーネントが検索可能 ``` ### ヒント4:一般的な検索に最適化する 頻繁にアクセスする情報をタイトルで構造化することで、正確なマッチングを実現します: ``` より良い: "Q4 Marketing Budget Analysis" 代わりに: "Some thoughts on numbers" ``` ### ヒント5:定期的なインデックスのメンテナンス NoteRichは自動的にインデックスを処理しますが、定期的に再構築することでパフォーマンスを最適化できます: 1. 設定→検索 2. "検索インデックスの再構築"をクリック 3. 完了通知を待つ これは以下の場合に推奨されます: - 1,000件以上のノートを一度にインポートする場合 - 主要なバージョンアップグレードの場合 - 検索が著しく遅くなった場合 --- ## 第8部:一般的な問題のトラブルシューティング ### 問題:検索結果に期待されるノートが見つからない **可能性のある原因**: 1. ノートが別のワークスペースにある 2. インデックスがまだ更新されていない 3. ノートが下書きとしてマークされている **解決策**: - 現在のワークスペースを示すURLを確認する - インデックスが更新されるまで数秒待つ - ノートの状態を確認する(下書きは検索から除外される)