Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com
Python 51.9%
TypeScript 32.7%
JavaScript 4.8%
CSS 4.1%
Shell 2.9%
HTML 1.8%
SQL 1.5%
1# Trouve-KA — tests de la recherche hybride (RRF, corps kNN)2# Author: Simon-Pierre Boucher3# Contact: contact@spboucher.ai45from trouveka.ranking import build_knn_body, rrf_fuse678def _hit(_id: str, **extra):9 return {"_id": _id, "_source": {"url": f"https://x.qc/{_id}"}, **extra}101112def test_rrf_doc_present_dans_les_deux_gagne():13 lexical = [_hit("a"), _hit("b"), _hit("c")]14 knn = [_hit("b"), _hit("d")]15 fused = rrf_fuse(lexical, knn)16 assert fused[0]["_id"] == "b" # présent dans les deux listes17 assert {h["_id"] for h in fused} == {"a", "b", "c", "d"}181920def test_rrf_conserve_le_highlight_lexical():21 lexical = [_hit("a", highlight={"body": ["<em>x</em>"]})]22 knn = [_hit("a")]23 fused = rrf_fuse(lexical, knn)24 assert "highlight" in fused[0]252627def test_rrf_listes_vides():28 assert rrf_fuse([], []) == []29 assert [h["_id"] for h in rrf_fuse([_hit("a")], [])] == ["a"]303132def test_knn_body_filtres_appliques():33 body = build_knn_body([0.1] * 4, filters=[{"term": {"language": "fr"}}], size=30)34 knn = body["query"]["knn"]["embedding"]35 assert knn["k"] == 3036 assert knn["filter"]["bool"]["filter"][0]["term"]["language"] == "fr"373839def test_knn_body_sans_filtre():40 body = build_knn_body([0.1] * 4, filters=[], size=10)41 assert "filter" not in body["query"]["knn"]["embedding"]42