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

WRInaute passionné
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
 
WRInaute accro
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.
@+
 
WRInaute accro
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);
 
WRInaute passionné
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 dit:
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
 
WRInaute passionné
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
 
WRInaute passionné
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) :

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
 
WRInaute accro
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.
 
WRInaute passionné
serval2a a dit:
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.
 
WRInaute accro
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.
@+
 
Discussions similaires
Haut