Formation par Olivier Duffez

Formation au référencement par Olivier Duffez, créateur de WebRankInfo !
Une formule efficace alliant théorie et pratique, avec une haute disponibilité des intervenants
Cette formule a déjà convaincu plusieurs centaines d'entreprises, pourquoi pas vous ?
Réservez vite votre place en ligne (convention possible pour imputer sur le budget formation)

Formation référencement Marseille

[MySQL] Full-text - Avoir un extrait des résultats

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
dorian53
WRInaute accro
WRInaute accro

Inscrit le: 10 Avr 2005
Messages: 1465

URL permanente de ce messagePosté le : Ven Déc 14, 2007 11:40    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

Bonjour,

Est-il possible de récupérer un extrait automatique du résultat d'une recherche issu des textes indexés en full-text ?

En indiquant de retourner soit :
- un paragraphe de X caractères,
- la mise en gras de l'expression recherchée.

Je sais que l'on peut récupérer un score de pertinence, mais je souhaite présenter le contexte des documents retournés (comme le fait un moteur de recherche).

Je peux évidemment le code moi même, mais cela devient vite complexe à gérer avec les expressions booléennes (l'asterix *, le moins exclusif -).

Merci
 
dorian53
serval2a
WRInaute accro
WRInaute accro

Inscrit le: 21 Mar 2005
Messages: 2943
Localisation: A la poursuite de Googlebot.

URL permanente de ce messagePosté le : Ven Déc 14, 2007 13:11    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

ben en fait ça marche comme une requête select lambda donc c'est toi qui lui dit quoi renvoyer, si tu as mis
SELECT id,description,url,bordy,news,date
ou encore SELECT *
tu peux renvoyer tous les champs que tu veux et mettre en gras ou fixer une taille via php par exemple. Full-texte servant juste à donner une simili pertinence.
@+
 
serval2a Visiter le site web du posteur
KOogar
WRInaute accro
WRInaute accro

Inscrit le: 16 Nov 2004
Messages: 2876
Localisation: Bangalore +3h30

URL permanente de ce messagePosté le : Ven Déc 14, 2007 14:04    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

pour faire une recherche sur une table ou 'recherche' est le mot ou l'expression:

Code:
$sql = mysql_query("SELECT col1 FROM table WHERE col1 LIKE %$recherche%") or die (mysql_error());


pour mettre un mot et des mots en gras dans une chaine :

Code:
eregi_replace($mot,"<strong>\\0</strong>",$chaine);
 
KOogar Visiter le site web du posteur
dorian53
WRInaute accro
WRInaute accro

Inscrit le: 10 Avr 2005
Messages: 1465

URL permanente de ce messagePosté le : Ven Déc 14, 2007 15:12    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

Malheureusement c'est bien plus complexe que cela.
La requête SQL ne me pose aucune problème.
Je récupère le texte sans soucis non plus.

En revanche ma question porte sur le fait que lorsqu'un texte retourné est composé de 10 000 lignes de X caractères.

Comment n'afficher qu'un extrait de 255 caractères comprenant le mot mis en valeur dans son contexte, (comme tous les moteurs de recherches).

KOogar a écrit:
pour mettre un mot et des mots en gras dans une chaine :
Code:
eregi_replace($mot,"<strong>\\0</strong>",$chaine);

Ce n'est qu'un début, de début... Je souhaiterais mettre en place un système insensible à la casse et aux accents.

S'il est saisie "accentue", je dois retourner "Accentué" en gras, dans son contexte...

J'ai un début d'algo... (mais en plus, je me perds mon temps avec des conversions utf-8)

Etc... voila le problème avec un petit plus de détails.

Merci
 
dorian53
rog
WRInaute accro
WRInaute accro

Inscrit le: 21 Sep 2006
Messages: 1662
Localisation: sapucaia do sul (RS)

URL permanente de ce messagePosté le : Ven Déc 14, 2007 17:37    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

c'est pas aussi lourd que ça en a l'air

1) tu prends les 255 caractères
2) crées une deuxième variable avec une conversion qui n'accepte pas les accentués
3) tu les mets en tableau
4) tu convertis ton mot cle
5) tu fais une intersection avec le deuxième tableau et tu recupères les index
6) tu fais une boucle sur le deuxième tableau et tu mets les cellules indexées en gras
7) accessoirement tu verifie le dernier élément, si il n'est pas dans l'intersection, tu ne le traites pas (pour eviter les mots incomplets)

rog

edit : 6) la boucle est sur le premier tableau


Dernière édition par rog le Ven Déc 14, 2007 18:43; édité 1 fois
 
rog Visiter le site web du posteur
dorian53
WRInaute accro
WRInaute accro

Inscrit le: 10 Avr 2005
Messages: 1465

URL permanente de ce messagePosté le : Ven Déc 14, 2007 18:30    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

En gros... oué.

Ce que je recherchais dans l'idéal c'était une fonction native dans MySQL parce que ça risque d'être lourd toutes ces conversions sur de gros documents.

Je suis dessus actuellement, juste avant de faire la 1ère étape 1) il faut déjà récupérer la position de l'expression recherchée, et par la suite de prendre un peu de texte avant et un peu de texte après.

Ce n'est pas tout.

Malheureusement, l'expression recherchée ne se limite pas un simple mot, il a toute l'analyse syntaxique à réaliser (que gère MySQL avec l'option IN BOOLEAN MODE) :

Citation:
test
"test phrase exacte"
test*
test -enlever
test +ajouter
test ((ça + "ça aussi") - ceci)


Sans parler de la ponctuation , . ' " etc.

Sur le papier c'est toujours simple, dans les faits moins.

Merci
 
dorian53
serval2a
WRInaute accro
WRInaute accro

Inscrit le: 21 Mar 2005
Messages: 2943
Localisation: A la poursuite de Googlebot.

URL permanente de ce messagePosté le : Ven Déc 14, 2007 19:29    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

En gros mois je vois ça :
Code:

$machaine = champ récupéré via full-text;
$pos = strpos("mot à chercher", $machaine);
$machaine = substr($machaine,$pos-100,$pos+100);

mais effectivement ça va merder si tu as plusieurs fois le mot.
 
serval2a Visiter le site web du posteur
dorian53
WRInaute accro
WRInaute accro

Inscrit le: 10 Avr 2005
Messages: 1465

URL permanente de ce messagePosté le : Lun Déc 17, 2007 11:50    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

serval2a a écrit:
En gros mois je vois ça :
Code:

$machaine = champ récupéré via full-text;
$pos = strpos("mot à chercher", $machaine);
$machaine = substr($machaine,$pos-100,$pos+100);

mais effectivement ça va merder si tu as plusieurs fois le mot.


Oui oké avec ça merci.
C'est pas encore trop violent.

Juste que je ne pense pas être le 1er a vouloir générer ce genre de résultats. J'aurais espéré trouver un code existant avec l'analyse de la query string pour créer la regex adéquat de la mise en gras.
 
dorian53
serval2a
WRInaute accro
WRInaute accro

Inscrit le: 21 Mar 2005
Messages: 2943
Localisation: A la poursuite de Googlebot.

URL permanente de ce messagePosté le : Lun Déc 17, 2007 12:12    Sujet du message: [MySQL] Full-text - Avoir un extrait des résultats

Je sais mais bon c'est vraiment le fonctionnement d'un moteur de recherche et je pense pas qu'il y ait beaucoup de WRInautes qui en aient développé un, sinon tu peux peut-être dé-compiler Sphider pour voir comment il traite ça.
Bon courage en tout cas.
@+
 
serval2a Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

Définitions :

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort