Moteur de recherche PHP

Soyez le premier à donner votre avis sur cette source.

Vue 10 860 fois - Téléchargée 3 446 fois

Description

Bonsoir à tous,
J'ai décidé de réaliser une base de connaissances en PHP pour une activité. Cependant j'avais besoins d'un outil qui maintienne un équilibre entre la performance et l'ergonomie (retrouver une information et la retrouver vite).
Pour ce faire j'ai créé un moteur de recherche qui cherche à émuler celui de google
et trie les articles par pertinence.
Le moteur fonctionne grâce à PDO
$db = new PDO("mysql:host=127.0.0.1;dbname=queryengine;charset=utf8","root","");


L'instanciation attend 1 paramètre obligatoire mais vous devrez obligatoirement vous servir du second
$sqe=new Query_Engine($db,[
    "CONTENT"=>"CONTENT_ARTICLE",
    "TITRE"=>"TITRE_ARTICLE",
    "RESUME"=>"RESUME_ARTICLE"
]);

Le premier c'est le PDO et le second assigne les champs sur lesquels le moteur devra faire les recherches.

CONTENT => Correspond au contenu de l'article
TITRE => Titre de l'article
RESUME => Résumé de l'article

Requête SQL / vous devez paramétrer la requête SQL permettant de récupérer les articles
$sqe->setQuery("SELECT * FROM article_tbl WHERE CONTENT_ARTICLE LIKE "%{:query:}%" OR TITRE_ARTICLE LIKE "%{:query:}%"");

{:query:} sera substitué par le critère de recherche appelé par la fonction ->query()
Paramètrez les coeficients
$sqe->setCoef("chapitre", 0.03);
$sqe->setCoef("tagcontent", 0.7);
$sqe->setCoef("title", 6);
$sqe->setCoef("resume", 0.06);
$sqe->setCoef("tag", 0.01);


"chapitre" correspond au nombre de chapitres dans l'article
"tagcontent" correspond au nombre de fois où la recherche se trouve entre des balises
"title" détermine quand la recherche correspond au titre
"resume" correspond au nombre de fois où la recherche se trouve dans le resumé
"tag" correspond au nombre de tags

Ajoutez les critères supplémentaires
$query="assurance";
$sqe->Pertinence_criteria("NB_CHAP", "/<h2/is");
$sqe->Pertinence_criteria("TAG", "/<[^>]+>/is");
$sqe->Pertinence_criteria("COUNT_RELIEF", "/<[^>]+>($query)<[^>]+>/is");


pour finir exécuter la requête

$result=$sqe->query($query);


Vous constaterez que quelque soit la requête saisie, le premier article sera toujours le plus pertinent.

Le ZIP contient l'exemple décrit plus haut ainsi que la base de données utilisée que vous pouvez importer.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.