mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-12 01:37:06 +02:00
Un mot fréquent noyait les bonnes pages : la recherche ne comptait que les occurrences. Elle pondère maintenant chaque terme par sa rareté dans la mémoire et favorise les pages qui couvrent plusieurs mots de la requête. Repris de l'amont AJEAN v0.11.7, avec ses tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7fwdmmVbvLHznF9v1npzN
51 lines
1.8 KiB
Go
51 lines
1.8 KiB
Go
package loki
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// Reproduit le bug rapporté : une petite page dont le NOM et le TITRE contiennent
|
|
// « copine » ne remontait pas pour la requête « copine Nathan », noyée par de
|
|
// grosses pages qui répètent « Nathan » des dizaines de fois. Le classement doit
|
|
// mettre en tête la page qui matche le PLUS de termes distincts (couverture),
|
|
// puis pondérer par la rareté.
|
|
func TestMemSearchCoverageBeatsFrequency(t *testing.T) {
|
|
testHome(t)
|
|
|
|
// Deux pages « bruyantes » bourrées de « Nathan », sans « copine ».
|
|
if err := MemAdd("business-nathan.md", "# Business Nathan\n"+strings.Repeat("Nathan veut un business. ", 40)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := MemAdd("guide-ajean.md", "# Guide AJEAN\n"+strings.Repeat("projet de Nathan. ", 30)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// La petite page cible : matche les DEUX termes de la requête.
|
|
if err := MemAdd("profil-copine-nathan.md", "# Profil : Copine de Nathan\n- Prénom : Bao\n"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
hits := MemSearch("copine Nathan", 8)
|
|
if len(hits) == 0 {
|
|
t.Fatal("aucun résultat pour « copine Nathan »")
|
|
}
|
|
if hits[0].File != "profil-copine-nathan.md" {
|
|
var names []string
|
|
for _, h := range hits {
|
|
names = append(names, h.File)
|
|
}
|
|
t.Fatalf("la page copine devrait être 1re (matche les 2 termes), obtenu ordre : %v", names)
|
|
}
|
|
}
|
|
|
|
// Une requête mono-terme rare doit privilégier un match dans le nom/titre.
|
|
func TestMemSearchNameTitleBoost(t *testing.T) {
|
|
testHome(t)
|
|
_ = MemAdd("notes-diverses.md", "# Notes\nUn jour Bao est passée dire bonjour, puis repartie.\n")
|
|
_ = MemAdd("profil-copine.md", "# Profil : Copine\n- Prénom : Bao\n")
|
|
hits := MemSearch("copine", 8)
|
|
if len(hits) == 0 || hits[0].File != "profil-copine.md" {
|
|
t.Fatalf("la page dont le nom/titre porte « copine » devrait être 1re, obtenu : %+v", hits)
|
|
}
|
|
}
|