ObsiViewer/docs/GRAPH/QUICK_START_GRAPH_SEARCH.md

333 lines
9.3 KiB
Markdown

# Guide de Démarrage Rapide - Graph View & Search Assistant
## 🚀 Lancement
```bash
# Installation des dépendances (si nécessaire)
npm install
# Démarrage du serveur de développement
npm start
# L'application sera accessible sur http://localhost:4000
```
## 📍 Accès aux Fonctionnalités
### 1. Assistant de Recherche (3 emplacements)
#### A. Barre Latérale (Vue Mobile/Desktop)
1. Cliquer sur l'icône de recherche dans la navigation
2. Le champ de recherche avec assistant apparaît
3. Focus → popover s'ouvre automatiquement
#### B. Header Central (Vue Desktop)
1. Barre de recherche toujours visible en haut
2. Focus → popover s'ouvre avec suggestions
#### C. Graph Settings → Filters
1. Ouvrir Graph View (icône graphe)
2. Panel "Graph settings" à droite
3. Section "Filters" → champ "Search files..."
### 2. Graph View avec Filtres
**Accès:**
1. Cliquer sur l'icône Graph View (4ème icône navigation)
2. Panel "Graph settings" s'ouvre à droite
**Filtres disponibles:**
- ☑️ **Tags**: Afficher les nœuds de tags (#code, #todo, etc.)
- ☑️ **Attachments**: Afficher fichiers PDF, PNG, etc.
- ☑️ **Existing files only**: Masquer les liens non résolus
- ☑️ **Orphans**: Afficher les nœuds sans connexions
**Recherche avancée:**
- Taper dans "Search files..." pour filtrer par requête Obsidian
### 3. Groups (Colorisation)
**Créer un groupe:**
1. Graph View → Section "Groups"
2. Cliquer "New group"
3. Éditer la requête (ex: `tag:#code`, `file:test`, `path:folder/`)
4. Le groupe colore automatiquement les nœuds matchant
**Gérer les groupes:**
- **Modifier**: Éditer directement la requête dans l'input
- **Supprimer**: Cliquer l'icône ❌
- **Réorganiser**: L'ordre détermine la priorité (haut = prioritaire)
## 🔍 Syntaxe de Recherche Obsidian
### Préfixes Supportés
| Préfixe | Description | Exemple |
|---------|-------------|---------|
| `path:` | Chemin du fichier | `path:folder/subfolder/` |
| `file:` | Nom du fichier | `file:readme` |
| `tag:` | Tag Obsidian | `tag:#todo` ou `tag:#code` |
| `line:` | Mots sur la même ligne | `line:important deadline` |
| `section:` | Sous le même heading | `section:Introduction` |
| `[property]` | Propriété YAML | `[title:test]` ou `[author]` |
### Opérateurs
| Opérateur | Description | Exemple |
|-----------|-------------|---------|
| `OR` | Union (l'un OU l'autre) | `tag:#todo OR tag:#urgent` |
| `AND` | Intersection (implicite) | `tag:#code file:test` |
| `-` | Exclusion (NOT) | `-tag:#done` |
| `"..."` | Phrase exacte | `"exact phrase"` |
| `*` | Wildcard | `test*` ou `*ing` |
| `()` | Groupes | `(tag:#a OR tag:#b) file:test` |
### Exemples de Requêtes
```
# Fichiers avec tag #code
tag:#code
# Fichiers dans le dossier "docs"
path:docs/
# Fichiers contenant "TODO" mais pas "DONE"
TODO -DONE
# Tags #todo OU #urgent dans le dossier "projects"
(tag:#todo OR tag:#urgent) path:projects/
# Fichiers avec propriété YAML "author: John"
[author:John]
# Phrase exacte
"fonction principale"
# Wildcard sur nom de fichier
file:test*
```
## 📚 Utilisation de l'Assistant
### Options de Recherche (Cliquables)
Au focus dans un champ de recherche, le popover affiche:
```
┌─────────────────────────────────────┐
│ Search options ⓘ Help │
├─────────────────────────────────────┤
│ path: match path of the file │
│ file: match file name │
│ tag: search for tags │
│ line: search keywords on line │
│ section: search under same heading │
│ [property] match property │
└─────────────────────────────────────┘
```
**Cliquer une option** → insère le préfixe dans l'input
### Suggestions Dynamiques
**Taper `path:`** → Liste des dossiers:
```
┌─────────────────────────┐
│ attachments │
│ folder │
│ deep │
│ deep/path │
│ tata/briana │
└─────────────────────────┘
```
**Taper `tag:`** → Liste des tags:
```
┌─────────────────────────┐
│ #code │
│ #todo │
│ #markdown │
│ #test │
└─────────────────────────┘
```
**Taper `file:`** → Liste des fichiers:
```
┌─────────────────────────┐
│ README.md │
│ test.md │
│ welcome.md │
└─────────────────────────┘
```
### Historique
Après avoir soumis des requêtes, l'historique apparaît:
```
┌─────────────────────────────────────┐
│ History Clear history │
├─────────────────────────────────────┤
│ tag:#code OR tag:#test │
│ path:docs/ │
│ file:readme │
│ [description:page] │
└─────────────────────────────────────┘
```
- **Cliquer un item** → applique la requête
- **Clear history** → vide l'historique (localStorage)
- **Maximum**: 10 requêtes récentes
### Navigation Clavier
- **↓** : Sélectionner suggestion suivante
- **↑** : Sélectionner suggestion précédente
- **Enter** : Appliquer suggestion sélectionnée
- **Esc** : Fermer le popover
## 🎨 Colorisation avec Groups
### Exemple: Colorer tous les fichiers de test en rose
1. Graph View → "Groups" → "New group"
2. Query: `file:test`
3. Le groupe applique automatiquement la couleur rose aux fichiers contenant "test"
### Exemple: Colorer par tags
```
Groupe 1 (violet): tag:#code
Groupe 2 (bleu): tag:#documentation
Groupe 3 (vert): tag:#todo
```
**Priorité**: Si un fichier a `#code` ET `#todo`, il sera violet (groupe 1 prioritaire)
### Exemple: Colorer par dossier
```
Groupe 1 (rouge): path:important/
Groupe 2 (jaune): path:drafts/
Groupe 3 (gris): path:archive/
```
## 🔧 Configuration Persistée
### Fichier `.obsidian/graph.json`
Tous les réglages sont sauvegardés automatiquement:
```json
{
"search": "tag:#code",
"showTags": true,
"showAttachments": true,
"hideUnresolved": true,
"showOrphans": true,
"colorGroups": [
{
"query": "file:test",
"color": {
"a": 1,
"rgb": 14701188
}
}
],
"showArrow": true,
"textFadeMultiplier": -1.7,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 0.690311418685121,
"linkDistance": 102
}
```
- **Debounce**: 250ms après modification
- **Polling**: Détection changements externes toutes les 2s
- **Atomic writes**: .tmp + rename pour éviter corruption
### localStorage
Historiques de recherche stockés par contexte:
```
obsidian-search-history-vault-sidebar → Sidebar mobile
obsidian-search-history-vault-header → Header desktop
obsidian-search-history-graph → Graph filters
```
## 🐛 Dépannage
### Le popover ne s'ouvre pas
- Vérifier que le focus est bien dans l'input
- Console browser → chercher erreurs JavaScript
### Les suggestions sont vides
- Vérifier que le vault contient des fichiers/tags
- L'index se rebuild au chargement des notes
- Console → vérifier `GraphIndexService.rebuildIndex` appelé
### Les filtres ne s'appliquent pas
- Vérifier `.obsidian/graph.json` existe et est valide JSON
- Recharger la page pour forcer rechargement config
- Tester avec config minimale
### Les couleurs de groupe ne s'appliquent pas
- Vérifier syntaxe de la requête (utiliser l'assistant)
- Tester requête dans "Search files..." d'abord
- Vérifier ordre des groupes (priorité haut → bas)
## 📊 Vérification de Parité
### Checklist Image 1 vs ObsiViewer
- [ ] Même nombre de nœuds visibles
- [ ] Tags affichés comme nœuds (#code, #markdown, etc.)
- [ ] Attachments visibles (PDF, PNG)
- [ ] Liens vers fichiers non résolus masqués (si "Existing files only")
- [ ] Orphans affichés/masqués selon toggle
- [ ] Groupe rose appliqué aux fichiers matchant `file:test`
- [ ] Flèches sur les arêtes (si "Arrows" activé)
## 🎯 Cas d'Usage Courants
### 1. Trouver tous les TODOs urgents
```
tag:#todo tag:#urgent -tag:#done
```
### 2. Documentation projet spécifique
```
path:docs/project-x/ file:*.md
```
### 3. Fichiers récents avec keyword
```
"important meeting" [date:2024-10]
```
### 4. Code non testé
```
path:src/ -file:*test* -file:*spec*
```
### 5. Groupe de couleurs par statut
```
Groupe 1 (vert): tag:#done
Groupe 2 (jaune): tag:#in-progress
Groupe 3 (rouge): tag:#blocked
```
## 📖 Ressources
- **Documentation complète**: `GRAPH_VIEW_SEARCH_IMPLEMENTATION.md`
- **Tests**: `src/core/search/search-parser.spec.ts`
- **Obsidian Search Docs**: https://help.obsidian.md/Plugins/Search
---
**Bon usage! 🎉**