9.1 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	Guide de Débogage de la Recherche Meilisearch
🔍 Problème Actuel
La recherche Meilisearch est activée mais les résultats ne s'affichent pas dans l'interface.
✅ Ce qui Fonctionne
Backend API
- ✅ Meilisearch est actif (port 7700)
 - ✅ Backend Express est actif (port 4000)
 - ✅ Index Meilisearch contient 642 documents
 - ✅ API 
/api/searchretourne des résultats valides 
Test backend :
curl "http://localhost:4000/api/search?q=test&limit=2"
# Retourne: {"hits":[...], "estimatedTotalHits":..., "processingTimeMs":...}
Configuration
- ✅ 
USE_MEILI: truedansenvironment.ts - ✅ Proxy Angular configuré (
/api→localhost:4000) - ✅ HttpClient configuré dans 
index.tsx 
Autres Fonctionnalités
- ✅ Bookmarks : Utilise 
/api/vault/bookmarks(backend) - ✅ Calendrier : Utilise 
/api/files/metadata(backend) - ✅ Vault : Utilise 
/api/vault(backend) 
🐛 Logs de Débogage Ajoutés
Frontend
1. SearchMeilisearchService
// src/core/search/search-meilisearch.service.ts
console.log('[SearchMeilisearchService] Sending request:', url);
console.log('[SearchMeilisearchService] Request completed');
2. SearchOrchestratorService
// src/core/search/search-orchestrator.service.ts
console.log('[SearchOrchestrator] Calling Meilisearch with query:', query);
console.log('[SearchOrchestrator] Raw Meilisearch response:', response);
console.log('[SearchOrchestrator] Transformed hit:', { id, matchCount, result });
3. SearchPanelComponent
// src/components/search-panel/search-panel.component.ts
console.log('[SearchPanel] Results received:', arr);
console.error('[SearchPanel] Search error:', e);
🧪 Tests à Effectuer
1. Vérifier les Logs Console
- Ouvrir DevTools (F12)
 - Aller dans Console
 - Taper une recherche (ex: "test")
 - Observer les logs dans l'ordre :
 
[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: [...], ...}
[SearchOrchestrator] Transformed hit: {id: "...", matchCount: 1, result: {...}}
[SearchPanel] Results received: [{noteId: "...", matches: [...], ...}]
2. Vérifier l'Onglet Network
- Ouvrir DevTools → Network
 - Filtrer : 
search - Taper une recherche
 - Vérifier :
- ✅ Requête GET 
/api/search?q=... - ✅ Status: 200 OK
 - ✅ Response contient 
hitsavec des données 
 - ✅ Requête GET 
 
3. Vérifier les Résultats Transformés
Dans la console, après une recherche :
// Inspecter le signal results
// (nécessite Angular DevTools ou breakpoint)
🔧 Points de Vérification
1. Proxy Angular
Fichier : proxy.conf.json
{
  "/api": {
    "target": "http://localhost:4000",
    "secure": false,
    "changeOrigin": true,
    "logLevel": "warn"
  }
}
Vérifier :
# Depuis le navigateur (port 3000)
curl http://localhost:3000/api/search?q=test
# Doit retourner les mêmes résultats que :
curl http://localhost:4000/api/search?q=test
2. Transformation des Résultats
Code : src/core/search/search-orchestrator.service.ts
Le mapping Meilisearch → SearchResult doit produire :
{
  noteId: string,      // ID du document
  matches: [           // Au moins 1 match
    {
      type: 'content',
      text: string,
      context: string,  // Contenu avec <mark> ou texte brut
      ranges: []
    }
  ],
  score: 100,
  allRanges: []
}
Problème potentiel : Si matches est vide, rien ne s'affiche.
Solution : Le code a été modifié pour toujours créer au moins un match avec excerpt ou content.
3. Affichage des Résultats
Composant : SearchResultsComponent
Vérifier dans le template :
@if (sortedGroups().length === 0) {
  <!-- Message "No results" -->
} @else {
  <!-- Liste des résultats -->
  @for (group of sortedGroups(); track group.noteId) {
    <!-- Affichage du groupe -->
  }
}
Signal à inspecter :
results(): Doit contenir les SearchResult[]sortedGroups(): Doit contenir les ResultGroup[]
🚨 Problèmes Possibles
Problème 1 : Requête HTTP ne part pas
Symptômes :
- Aucun log 
[SearchMeilisearchService] Sending request - Aucune requête dans Network tab
 
Causes possibles :
USE_MEILIn'est pas àtrue- Service non injecté correctement
 - Observable non souscrit
 
Solution :
// Vérifier dans environment.ts
export const environment = {
  USE_MEILI: true, // ← Doit être true
  // ...
};
Problème 2 : Requête part mais pas de réponse
Symptômes :
- Log 
[SearchMeilisearchService] Sending requestprésent - Pas de log 
Request completed - Erreur dans Network tab
 
Causes possibles :
- Backend non démarré
 - Proxy mal configuré
 - CORS
 
Solution :
# Vérifier backend
curl http://localhost:4000/api/search?q=test
# Vérifier proxy
# Redémarrer ng serve si nécessaire
Problème 3 : Réponse reçue mais pas de résultats
Symptômes :
- Log 
[SearchOrchestrator] Raw Meilisearch responseprésent hits.length > 0- Mais 
matches.length === 0dans transformed hit 
Causes possibles :
_formattedabsent dans la réponse Meilisearchexcerptabsent- Mapping incorrect
 
Solution :
Le code a été modifié pour créer un match de fallback avec excerpt ou un extrait de content.
Problème 4 : Résultats transformés mais pas affichés
Symptômes :
- Log 
[SearchPanel] Results receivedavecarr.length > 0 - Mais rien ne s'affiche dans l'UI
 
Causes possibles :
- Signal 
resultsnon mis à jour - Composant SearchResults ne reçoit pas les données
 - Change detection non déclenchée
 
Solution :
// Vérifier que results.set() est appelé
this.results.set(arr);
this.hasSearched.set(true);
Problème 5 : Highlighting ne fonctionne pas
Symptômes :
- Résultats affichés
 - Mais pas de surlignage (balises 
<mark>) 
Causes possibles :
_formattedabsent- HTML échappé
 - Balises 
<mark>non rendues 
Solution : Le code a été modifié pour :
- Détecter les balises 
<mark>dansmatch.context - Retourner le HTML tel quel (sans échappement) si présent
 - Sinon, utiliser le highlighter local
 
📋 Checklist de Débogage
- Backend démarré (
node server/index.mjs) - Frontend démarré (
npm run dev) - Meilisearch actif (
docker ps | grep meilisearch) USE_MEILI: truedansenvironment.ts- Hard refresh du navigateur (Ctrl+Shift+R)
 - DevTools Console ouverte
 - DevTools Network tab ouverte
 - Taper une recherche (2+ caractères)
 - Vérifier logs console (ordre attendu)
 - Vérifier requête HTTP dans Network
 - Vérifier réponse JSON (hits présents)
 - Vérifier transformation (matches non vide)
 - Vérifier affichage (liste de résultats visible)
 
🔄 Workflow de Test Complet
# 1. Vérifier Meilisearch
docker ps | grep meilisearch
curl http://127.0.0.1:7700/health
# 2. Vérifier Backend
curl "http://localhost:4000/api/search?q=test&limit=1"
# Doit retourner JSON avec hits
# 3. Démarrer Frontend (si pas déjà fait)
npm run dev
# 4. Ouvrir navigateur
# http://localhost:3000
# 5. Ouvrir DevTools (F12)
# - Console tab
# - Network tab
# 6. Taper recherche
# - Minimum 2 caractères
# - Observer logs console
# - Observer requête Network
# 7. Vérifier affichage
# - Liste de résultats doit apparaître
# - Cliquer sur un groupe pour voir les matches
# - Vérifier highlighting (balises <mark>)
🆘 Si Rien Ne Fonctionne
Étape 1 : Vérifier Backend Isolé
curl -v "http://localhost:4000/api/search?q=test&limit=1"
Attendu :
- Status: 200 OK
 - Content-Type: application/json
 - Body: 
{"hits":[...], ...} 
Étape 2 : Vérifier Proxy
# Depuis un autre terminal
curl "http://localhost:3000/api/search?q=test&limit=1"
Attendu : Même réponse que backend direct
Étape 3 : Vérifier Logs Backend
Dans le terminal où node server/index.mjs tourne :
[Meili] Search query: test
[Meili] Results: 1 hits in 15ms
Étape 4 : Vérifier Logs Frontend
Dans la console du navigateur :
[SearchOrchestrator] Calling Meilisearch with query: test
[SearchMeilisearchService] Sending request: /api/search?q=test&limit=20&highlight=true
Étape 5 : Breakpoint Debugging
- Ouvrir DevTools → Sources
 - Trouver 
search-panel.component.ts - Mettre un breakpoint sur 
this.results.set(arr) - Taper une recherche
 - Inspecter 
arrquand le breakpoint est atteint 
📊 Métriques de Performance
Une fois fonctionnel, vérifier :
- Temps de recherche : < 100ms (Meili + réseau)
 - Nombre de résultats : Dépend de la requête
 - Highlighting : Balises 
<mark>présentes - Pas de gel UI : Interface reste réactive
 
🎯 Prochaines Étapes
Une fois la recherche fonctionnelle :
- Retirer les 
console.logde débogage - Optimiser le mapping si nécessaire
 - Ajouter tests E2E
 - Documenter le comportement final