SPB Git forge

spb/trouve-ka

Public ★ Pinned

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

40commits 1branches 0releases
9.2 MBsize
maindefault branch
23 days agolast push
Python 51.9% TypeScript 32.7% JavaScript 4.8% CSS 4.1% Shell 2.9% HTML 1.8% SQL 1.5%
1.3 KB · 42 lines python
Raw Blame History
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