Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Pertinence de recherche fulltext

10 views
Skip to first unread message

Pascale

unread,
Jan 21, 2012, 1:27:00 PM1/21/12
to
Bonjour,

J'ai une recherche fulltext qui marche (je n'en suis qu'aux tests et aux
essais, c'est loin d'être fini).
J'aimerais ne sélectionner que les résultats dont la pertinence est
supérieure à une valeur (à déterminer...). De plus, si je passe à une
recherche avec booléens, je vais perdre le tri automatique par pertinence
décroissante, donc j'aimerais bien connaître cette précieuse pertinence.

J'ai une requête toute bête du type :

$sel = "SELECT numfiche,nom FROM matable WHERE MATCH (nom) AGAINST
('$rech') AS score";
$req = mysql_query($sel) or die('Erreur SQL !'.$sel.'<br>'.mysql_error().'
);
$total = mysql_num_rows($req);
if ($total != 0)
{
while ($data=mysql_fetch_assoc($req))
{
$numfiche=$data['numfiche'];
$nom=$data['nom'];
echo '<p>Numéro&nbsp;:'.$numfiche.' - nom&nbsp;: '.$nom.'</p>';
}
}
Donc, la question bête est : comment récupérer ce fameux score ?

Merci pour votre aide.

--
Pascale
http://www.la-grille-verte.net

Pascal Poncet

unread,
Jan 22, 2012, 4:35:25 AM1/22/12
to
Le 21/01/2012 19:27, Pascale a écrit :
> Bonjour,

Bonjour !

> $sel = "SELECT numfiche,nom FROM matable WHERE MATCH (nom) AGAINST
> ('$rech') AS score";
> [...]
> Donc, la question bête est : comment récupérer ce fameux score ?

Je ne suis pas un spécialiste des recherches fulltext mais, par
curiosité, j'ai été fouiner dans le manuel et ailleurs.

Si j'ai bien tout compris, la seule solution pour récupérer l'indice de
pertinence est de doubler la fonction MATCH dans la liste des colonnes
sélectionnées.

Dans ton cas, ça donnerait cela :

<sql>
SELECT numfiche, nom, MATCH (nom) AGAINST ('$rech') AS score
FROM matable
WHERE MATCH (nom) AGAINST ('$rech')
</sql>

Nota : dans la logique un peu idiote de SQL, on ne peut pas utiliser
l'alias dans la clause WHERE, car le traitement de la requête commence
par ce filtre et n'a donc pas encore connaissance des alias !

Maintenant, s'il s'agit de ne récupérer que les résultats d'un certain
niveau de pertinence, je crois qu'un opérateur de comparaison peut être
utilisé directement dans la clause WHERE.

En reprenant la requête précédente :

<sql>
SELECT numfiche, nom, MATCH (nom) AGAINST ('$rech') AS score
FROM matable
WHERE MATCH (nom) AGAINST ('$rech') > 5
</sql>

Bons tests !


--
Cordialement,
Pascal

Olivier Masson

unread,
Jan 23, 2012, 5:02:19 AM1/23/12
to
Le 21/01/2012 19:27, Pascale a écrit :
Je te suggère surtout d'aller voir ce qui s'y connaissent davantage, sur
le bon forum (f.c.a.sgbd).
Suivi donc sur ce forum.
0 new messages