250 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 🧪 Test de la Recherche Meilisearch
 | |
| 
 | |
| ## ✅ Modifications Appliquées
 | |
| 
 | |
| ### 1. Logs de Débogage Ajoutés
 | |
| 
 | |
| **Fichiers modifiés :**
 | |
| - `src/core/search/search-meilisearch.service.ts` - Logs requête HTTP
 | |
| - `src/core/search/search-orchestrator.service.ts` - Logs transformation
 | |
| - `src/components/search-panel/search-panel.component.ts` - Logs résultats
 | |
| - `src/components/search-results/search-results.component.ts` - Support HTML highlight
 | |
| 
 | |
| ### 2. Garantie d'Affichage des Résultats
 | |
| 
 | |
| **Problème résolu :** Les hits Meilisearch sans `_formatted` ne créaient aucun match.
 | |
| 
 | |
| **Solution :** Fallback automatique sur `excerpt` ou extrait de `content` pour toujours avoir au moins un match affichable.
 | |
| 
 | |
| ### 3. Support du Highlighting Serveur
 | |
| 
 | |
| **Problème résolu :** Les balises `<mark>` de Meilisearch étaient échappées.
 | |
| 
 | |
| **Solution :** Détection des balises HTML pré-existantes et rendu sans échappement.
 | |
| 
 | |
| ## 🚀 Comment Tester
 | |
| 
 | |
| ### Prérequis
 | |
| 
 | |
| ```bash
 | |
| # 1. Meilisearch actif
 | |
| docker ps | grep meilisearch
 | |
| # ✅ Doit afficher : obsiviewer-meilisearch ... Up ... 7700->7700
 | |
| 
 | |
| # 2. Backend actif
 | |
| # Terminal 1 :
 | |
| node server/index.mjs
 | |
| # ✅ Doit afficher : ObsiViewer server running on http://0.0.0.0:4000
 | |
| 
 | |
| # 3. Frontend actif
 | |
| # Terminal 2 :
 | |
| npm run dev
 | |
| # ✅ Doit afficher : Local: http://localhost:3000
 | |
| ```
 | |
| 
 | |
| ### Test 1 : Backend Direct
 | |
| 
 | |
| ```bash
 | |
| curl "http://localhost:4000/api/search?q=test&limit=2"
 | |
| ```
 | |
| 
 | |
| **Résultat attendu :**
 | |
| ```json
 | |
| {
 | |
|   "hits": [
 | |
|     {
 | |
|       "id": "...",
 | |
|       "title": "...",
 | |
|       "excerpt": "...",
 | |
|       "_formatted": {
 | |
|         "title": "...<mark>test</mark>...",
 | |
|         "content": "...<mark>test</mark>..."
 | |
|       }
 | |
|     }
 | |
|   ],
 | |
|   "estimatedTotalHits": 10,
 | |
|   "processingTimeMs": 15,
 | |
|   "query": "test"
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Test 2 : Interface Utilisateur
 | |
| 
 | |
| 1. **Ouvrir** : http://localhost:3000
 | |
| 2. **Ouvrir DevTools** : F12
 | |
| 3. **Aller dans Console**
 | |
| 4. **Cliquer sur la barre de recherche**
 | |
| 5. **Taper** : `test` (ou tout autre mot)
 | |
| 6. **Attendre 300ms** (debounce)
 | |
| 
 | |
| **Logs attendus dans Console :**
 | |
| ```
 | |
| [SearchOrchestrator] Calling Meilisearch with query: test
 | |
| [SearchMeilisearchService] Sending request: /api/search?q=test&limit=20&highlight=true
 | |
| [SearchMeilisearchService] Request completed
 | |
| [SearchOrchestrator] Raw Meilisearch response: {hits: Array(X), ...}
 | |
| [SearchOrchestrator] Transformed hit: {id: "...", matchCount: 1, ...}
 | |
| [SearchPanel] Results received: Array(X)
 | |
| ```
 | |
| 
 | |
| **Interface attendue :**
 | |
| - ✅ Liste de résultats apparaît
 | |
| - ✅ Nombre de résultats affiché (ex: "5 results")
 | |
| - ✅ Groupes de fichiers visibles
 | |
| - ✅ Cliquer sur un groupe → matches s'affichent
 | |
| - ✅ Texte surligné en jaune (`<mark>`)
 | |
| 
 | |
| ### Test 3 : Network Tab
 | |
| 
 | |
| 1. **DevTools** → **Network**
 | |
| 2. **Filtrer** : `search`
 | |
| 3. **Taper une recherche**
 | |
| 
 | |
| **Requête attendue :**
 | |
| - **URL** : `/api/search?q=test&limit=20&highlight=true`
 | |
| - **Method** : GET
 | |
| - **Status** : 200 OK
 | |
| - **Response** : JSON avec `hits`
 | |
| 
 | |
| ### Test 4 : Recherche Live
 | |
| 
 | |
| 1. **Taper lentement** : `t` → `te` → `tes` → `test`
 | |
| 2. **Observer** : Recherche se déclenche après 300ms de pause
 | |
| 3. **Vérifier** : Pas de gel de l'interface
 | |
| 
 | |
| ### Test 5 : Opérateurs Obsidian
 | |
| 
 | |
| ```
 | |
| # Recherche simple
 | |
| test
 | |
| 
 | |
| # Par tag
 | |
| tag:projet
 | |
| 
 | |
| # Par chemin
 | |
| path:docs/
 | |
| 
 | |
| # Par fichier
 | |
| file:readme
 | |
| 
 | |
| # Combinaison
 | |
| tag:important path:2024/
 | |
| ```
 | |
| 
 | |
| ## 🐛 Que Faire Si Ça Ne Marche Pas
 | |
| 
 | |
| ### Symptôme : Aucune requête HTTP
 | |
| 
 | |
| **Vérifier :**
 | |
| ```bash
 | |
| # 1. Backend tourne ?
 | |
| netstat -ano | findstr :4000
 | |
| 
 | |
| # 2. USE_MEILI activé ?
 | |
| # Ouvrir : src/core/logging/environment.ts
 | |
| # Vérifier : USE_MEILI: true
 | |
| ```
 | |
| 
 | |
| **Solution :**
 | |
| - Redémarrer backend : `node server/index.mjs`
 | |
| - Hard refresh navigateur : Ctrl+Shift+R
 | |
| 
 | |
| ### Symptôme : Requête part mais erreur 404/500
 | |
| 
 | |
| **Vérifier :**
 | |
| ```bash
 | |
| # Test direct backend
 | |
| curl "http://localhost:4000/api/search?q=test"
 | |
| 
 | |
| # Si erreur : vérifier logs backend
 | |
| # Terminal où node tourne
 | |
| ```
 | |
| 
 | |
| **Solution :**
 | |
| - Vérifier que Meilisearch est actif
 | |
| - Réindexer si nécessaire : `npm run meili:reindex`
 | |
| 
 | |
| ### Symptôme : Réponse OK mais rien ne s'affiche
 | |
| 
 | |
| **Vérifier dans Console :**
 | |
| ```
 | |
| [SearchPanel] Results received: Array(0)
 | |
| # ← Si Array(0), aucun résultat trouvé
 | |
| ```
 | |
| 
 | |
| **Solution :**
 | |
| - Essayer un autre terme de recherche
 | |
| - Vérifier que l'index contient des documents :
 | |
|   ```bash
 | |
|   curl "http://127.0.0.1:7700/indexes/notes_c_obsidian_doc_obsidian_it/stats" -H "Authorization: Bearer devMeiliKey123"
 | |
|   ```
 | |
| 
 | |
| ### Symptôme : Résultats affichés mais pas de highlighting
 | |
| 
 | |
| **Vérifier :**
 | |
| - Inspecter un match dans DevTools
 | |
| - Chercher les balises `<mark>` dans le HTML
 | |
| 
 | |
| **Solution :**
 | |
| - Vérifier que `highlight=true` dans la requête
 | |
| - Vérifier que `_formatted` est présent dans la réponse
 | |
| 
 | |
| ## 📊 Résultats Attendus
 | |
| 
 | |
| ### Performance
 | |
| - **Temps de recherche** : 15-50ms (Meilisearch)
 | |
| - **Temps total** : < 100ms (avec réseau)
 | |
| - **Pas de gel UI** : ✅ Interface reste réactive
 | |
| 
 | |
| ### Affichage
 | |
| - **Nombre de résultats** : Affiché en haut
 | |
| - **Groupes par fichier** : ✅ Pliables/dépliables
 | |
| - **Matches** : ✅ Visibles avec contexte
 | |
| - **Highlighting** : ✅ Texte surligné en jaune
 | |
| 
 | |
| ### Fonctionnalités
 | |
| - **Recherche live** : ✅ Pendant la saisie (debounce 300ms)
 | |
| - **Opérateurs** : ✅ `tag:`, `path:`, `file:`
 | |
| - **Tri** : ✅ Par pertinence, nom, date modifiée
 | |
| - **Navigation** : ✅ Clic sur résultat ouvre la note
 | |
| 
 | |
| ## ✅ Checklist de Validation
 | |
| 
 | |
| - [ ] Backend démarré et accessible
 | |
| - [ ] Frontend démarré sur port 3000
 | |
| - [ ] Meilisearch actif sur port 7700
 | |
| - [ ] Hard refresh effectué (Ctrl+Shift+R)
 | |
| - [ ] DevTools Console ouverte
 | |
| - [ ] Recherche tapée (2+ caractères)
 | |
| - [ ] Logs console présents et corrects
 | |
| - [ ] Requête HTTP visible dans Network
 | |
| - [ ] Résultats affichés dans l'interface
 | |
| - [ ] Highlighting visible (texte surligné)
 | |
| - [ ] Pas de gel pendant la saisie
 | |
| - [ ] Clic sur résultat fonctionne
 | |
| 
 | |
| ## 🎯 Prochaines Étapes
 | |
| 
 | |
| Une fois la recherche validée :
 | |
| 
 | |
| 1. **Retirer les logs de débogage** (ou les mettre en mode debug uniquement)
 | |
| 2. **Tester avec différentes requêtes** (tags, paths, etc.)
 | |
| 3. **Valider la performance** avec un gros vault (1000+ notes)
 | |
| 4. **Documenter le comportement final**
 | |
| 5. **Créer des tests E2E** automatisés
 | |
| 
 | |
| ## 📚 Documentation
 | |
| 
 | |
| - **Guide complet** : `docs/SEARCH_OPTIMIZATION.md`
 | |
| - **Guide de débogage** : `docs/SEARCH_DEBUG_GUIDE.md`
 | |
| - **Migration** : `docs/CHANGELOG/SEARCH_MEILISEARCH_MIGRATION.md`
 | |
| - **Démarrage rapide** : `QUICK_START.md`
 | |
| 
 | |
| ## 🆘 Support
 | |
| 
 | |
| Si les tests échouent après avoir suivi ce guide :
 | |
| 1. Copier les logs console complets
 | |
| 2. Copier la réponse de `/api/search?q=test&limit=1`
 | |
| 3. Vérifier les versions (Node, Angular, Meilisearch)
 | |
| 4. Consulter `docs/SEARCH_DEBUG_GUIDE.md` pour diagnostic approfondi
 |