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 :'.$numfiche.' - nom : '.$nom.'</p>';
}
}
Donc, la question bête est : comment récupérer ce fameux score ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pascal Poncet
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
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>
$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
Le 21/01/2012 19:27, Pascale a écrit :
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 :'.$numfiche.' - nom : '.$nom.'</p>'; } } Donc, la question bête est : comment récupérer ce fameux score ?
Merci pour votre aide.
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.
Le 21/01/2012 19:27, Pascale a écrit :
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 :'.$numfiche.' - nom : '.$nom.'</p>';
}
}
Donc, la question bête est : comment récupérer ce fameux score ?
Merci pour votre aide.
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.
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 :'.$numfiche.' - nom : '.$nom.'</p>'; } } Donc, la question bête est : comment récupérer ce fameux score ?
Merci pour votre aide.
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.
Pascale
Olivier Masson écrivait news:4f1d3034$0$2536$:
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.
Merci à tous les deux (honte à moi, je ne connaissais même pas fcasgbd).
En cherchant ici et là, je suis arrivée à quelque chose qui donne un résultat semble-t-il correct, suffisant pour ce que je veux faire :
Je vérifie le nombre de mots entrés, et je regarde si la personne a choisi de rechercher tous les termes ou au moins un. Ensuite, le select est écrit comme ça :
$sel = "SELECT numfiche,nom,etat, MATCH (nom) AGAINST ('$rech') AS score FROM matable WHERE MATCH (nom) AGAINST ('$rech' IN BOOLEAN MODE) HAVING score > 1 ORDER BY score DESC";
Le score est calculé d'après une recherche en langage naturel, alors que la recherche elle-même est effectuée en mode booléen. À l'usage, et sur une table comme celle que j'ai, ça va plutôt pas mal.
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très utile !
Je vérifie le nombre de mots entrés, et je regarde si la personne a choisi
de rechercher tous les termes ou au moins un.
Ensuite, le select est écrit comme ça :
$sel = "SELECT numfiche,nom,etat, MATCH (nom) AGAINST ('$rech') AS score
FROM matable WHERE MATCH (nom) AGAINST ('$rech' IN BOOLEAN MODE) HAVING
score > 1 ORDER BY score DESC";
Le score est calculé d'après une recherche en langage naturel, alors que la
recherche elle-même est effectuée en mode booléen. À l'usage, et sur une
table comme celle que j'ai, ça va plutôt pas mal.
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très
utile !
Je vérifie le nombre de mots entrés, et je regarde si la personne a choisi de rechercher tous les termes ou au moins un. Ensuite, le select est écrit comme ça :
$sel = "SELECT numfiche,nom,etat, MATCH (nom) AGAINST ('$rech') AS score FROM matable WHERE MATCH (nom) AGAINST ('$rech' IN BOOLEAN MODE) HAVING score > 1 ORDER BY score DESC";
Le score est calculé d'après une recherche en langage naturel, alors que la recherche elle-même est effectuée en mode booléen. À l'usage, et sur une table comme celle que j'ai, ça va plutôt pas mal.
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très utile !
-- Pascale http://www.la-grille-verte.net
Olivier Masson
Le 24/01/2012 09:33, Pascale a écrit :
Merci à tous les deux (honte à moi, je ne connaissais même pas fcasgbd).
En cherchant ici et là, je suis arrivée à quelque chose qui donne un résultat semble-t-il correct, suffisant pour ce que je veux faire :
Je vérifie le nombre de mots entrés, et je regarde si la personne a choisi de rechercher tous les termes ou au moins un. Ensuite, le select est écrit comme ça :
$sel = "SELECT numfiche,nom,etat, MATCH (nom) AGAINST ('$rech') AS score FROM matable WHERE MATCH (nom) AGAINST ('$rech' IN BOOLEAN MODE) HAVING score> 1 ORDER BY score DESC";
Le score est calculé d'après une recherche en langage naturel, alors que la recherche elle-même est effectuée en mode booléen. À l'usage, et sur une table comme celle que j'ai, ça va plutôt pas mal.
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très utile !
Ben tu t'es bien débrouillée, ça semble fonctionner comme il faut. Même si je n'ai pas trouvé la dracaena compacta qui orne mon bureau :) (bon, elle ressemble bcp à la Dracaena deremensis)
Le 24/01/2012 09:33, Pascale a écrit :
Merci à tous les deux (honte à moi, je ne connaissais même pas fcasgbd).
En cherchant ici et là, je suis arrivée à quelque chose qui donne un
résultat semble-t-il correct, suffisant pour ce que je veux faire :
Je vérifie le nombre de mots entrés, et je regarde si la personne a choisi
de rechercher tous les termes ou au moins un.
Ensuite, le select est écrit comme ça :
$sel = "SELECT numfiche,nom,etat, MATCH (nom) AGAINST ('$rech') AS score
FROM matable WHERE MATCH (nom) AGAINST ('$rech' IN BOOLEAN MODE) HAVING
score> 1 ORDER BY score DESC";
Le score est calculé d'après une recherche en langage naturel, alors que la
recherche elle-même est effectuée en mode booléen. À l'usage, et sur une
table comme celle que j'ai, ça va plutôt pas mal.
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très
utile !
Ben tu t'es bien débrouillée, ça semble fonctionner comme il faut.
Même si je n'ai pas trouvé la dracaena compacta qui orne mon bureau :)
(bon, elle ressemble bcp à la Dracaena deremensis)
Je vérifie le nombre de mots entrés, et je regarde si la personne a choisi de rechercher tous les termes ou au moins un. Ensuite, le select est écrit comme ça :
$sel = "SELECT numfiche,nom,etat, MATCH (nom) AGAINST ('$rech') AS score FROM matable WHERE MATCH (nom) AGAINST ('$rech' IN BOOLEAN MODE) HAVING score> 1 ORDER BY score DESC";
Le score est calculé d'après une recherche en langage naturel, alors que la recherche elle-même est effectuée en mode booléen. À l'usage, et sur une table comme celle que j'ai, ça va plutôt pas mal.
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très utile !
Ben tu t'es bien débrouillée, ça semble fonctionner comme il faut. Même si je n'ai pas trouvé la dracaena compacta qui orne mon bureau :) (bon, elle ressemble bcp à la Dracaena deremensis)
Pascale
Olivier Masson écrivait news:4f1e7bec$0$5670$:
Ben tu t'es bien débrouillée, ça semble fonctionner comme il faut. Même si je n'ai pas trouvé la dracaena compacta qui orne mon bureau :) (bon, elle ressemble bcp à la Dracaena deremensis)
Ben tu t'es bien débrouillée, ça semble fonctionner comme il faut.
Même si je n'ai pas trouvé la dracaena compacta qui orne mon bureau :)
(bon, elle ressemble bcp à la Dracaena deremensis)
Ben tu t'es bien débrouillée, ça semble fonctionner comme il faut. Même si je n'ai pas trouvé la dracaena compacta qui orne mon bureau :) (bon, elle ressemble bcp à la Dracaena deremensis)
Passe une demande ! (-:
-- Pascale http://www.la-grille-verte.net
SQLpro
Le 24/01/2012 09:33, Pascale a écrit : [...]
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très utile !
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL impose et ce que fait la concurrence !!! Par exemple la recherche sans tenir compte des accents est impossible...
À lire : http://blog.developpez.com/sqlpro/p9344/langage-sql-norme/indexation-textuelle-full-text-search-no/
A +
-- Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66 Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
Le 24/01/2012 09:33, Pascale a écrit :
[...]
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très
utile !
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL
impose et ce que fait la concurrence !!! Par exemple la recherche sans
tenir compte des accents est impossible...
À lire :
http://blog.developpez.com/sqlpro/p9344/langage-sql-norme/indexation-textuelle-full-text-search-no/
A +
--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très utile !
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL impose et ce que fait la concurrence !!! Par exemple la recherche sans tenir compte des accents est impossible...
À lire : http://blog.developpez.com/sqlpro/p9344/langage-sql-norme/indexation-textuelle-full-text-search-no/
A +
-- Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66 Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
helios
SQLpro a écrit :
Le 24/01/2012 09:33, Pascale a écrit : [...]
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très utile !
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL impose et ce que fait la concurrence !!! Par exemple la recherche sans tenir compte des accents est impossible...
À lire : http://blog.developpez.com/sqlpro/p9344/langage-sql-norme/indexation-textuelle-full-text-search-no/
A +
Oui, mais pauvre et mal foutu avec un SGBD MV comparé à ce que la norme MV impose et ce que fait la concurrence !!!
SQLpro a écrit :
Le 24/01/2012 09:33, Pascale a écrit :
[...]
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil
très
utile !
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL
impose et ce que fait la concurrence !!! Par exemple la recherche sans
tenir compte des accents est impossible...
À lire :
http://blog.developpez.com/sqlpro/p9344/langage-sql-norme/indexation-textuelle-full-text-search-no/
A +
Oui, mais pauvre et mal foutu avec un SGBD MV comparé à ce que la norme
MV impose et ce que fait la concurrence !!!
Merci de m'avoir fait découvrir la recherche fulltext, c'est un outil très utile !
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL impose et ce que fait la concurrence !!! Par exemple la recherche sans tenir compte des accents est impossible...
À lire : http://blog.developpez.com/sqlpro/p9344/langage-sql-norme/indexation-textuelle-full-text-search-no/
A +
Oui, mais pauvre et mal foutu avec un SGBD MV comparé à ce que la norme MV impose et ce que fait la concurrence !!!
Pascale
SQLpro écrivait news:4f2594ef$0$4209$:
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL impose et ce que fait la concurrence !!! Par exemple la recherche sans tenir compte des accents est impossible...
J'ai peu d'accents dans mes données (pas d'accents en latin), mais il y en a quand même quelques uns car les noms vernaculaires sont parfois précisés.
- Chene et chêne donnent le même résultat ; - idem pour amere et amère ; - idem pour judee et Judée : etc.
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL
impose et ce que fait la concurrence !!! Par exemple la recherche sans
tenir compte des accents est impossible...
J'ai peu d'accents dans mes données (pas d'accents en latin), mais il y en
a quand même quelques uns car les noms vernaculaires sont parfois précisés.
- Chene et chêne donnent le même résultat ;
- idem pour amere et amère ;
- idem pour judee et Judée :
etc.
Oui, mais pauvre et mal foutu avec MySQL comparé à ce que la norme SQL impose et ce que fait la concurrence !!! Par exemple la recherche sans tenir compte des accents est impossible...
J'ai peu d'accents dans mes données (pas d'accents en latin), mais il y en a quand même quelques uns car les noms vernaculaires sont parfois précisés.
- Chene et chêne donnent le même résultat ; - idem pour amere et amère ; - idem pour judee et Judée : etc.
Donc pour moi, pas de problème.
-- Pascale http://www.la-grille-verte.net
Pascale
Pascale <chaton.tigre+ écrivait news::
Donc pour moi, pas de problème.
Je dis quand même une bêtise : ça marche parce que j'ai mis dans mon code :