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

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


dorian53
WRInaute accro
WRInaute accro
 
Messages: 1901
Inscription: Dim Avr 10, 2005 16:56

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

Message le Ven Déc 14, 2007 10:40

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


serval2a
WRInaute accro
WRInaute accro
 
Messages: 3453
Inscription: Lun Mar 21, 2005 18:17

Message le Ven Déc 14, 2007 12:11

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.
@+


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3332
Inscription: Mar Nov 16, 2004 18:27

Message le Ven Déc 14, 2007 13:04

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

Code: Tout sélectionner
$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: Tout sélectionner
eregi_replace($mot,"<strong>\\0</strong>",$chaine);


dorian53
WRInaute accro
WRInaute accro
 
Messages: 1901
Inscription: Dim Avr 10, 2005 16:56

Message le Ven Déc 14, 2007 14:12

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: Tout sélectionner
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


rog
WRInaute accro
WRInaute accro
 
Messages: 1662
Inscription: Jeu Sep 21, 2006 2:32

Message le Ven Déc 14, 2007 16:37

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 17:43, édité 1 fois.


dorian53
WRInaute accro
WRInaute accro
 
Messages: 1901
Inscription: Dim Avr 10, 2005 16:56

Message le Ven Déc 14, 2007 17:30

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


serval2a
WRInaute accro
WRInaute accro
 
Messages: 3453
Inscription: Lun Mar 21, 2005 18:17

Message le Ven Déc 14, 2007 18:29

En gros mois je vois ça :
Code: Tout sélectionner
$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.


dorian53
WRInaute accro
WRInaute accro
 
Messages: 1901
Inscription: Dim Avr 10, 2005 16:56

Message le Lun Déc 17, 2007 10:50

serval2a a écrit:En gros mois je vois ça :
Code: Tout sélectionner
$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.


serval2a
WRInaute accro
WRInaute accro
 
Messages: 3453
Inscription: Lun Mar 21, 2005 18:17

Message le Lun Déc 17, 2007 11:12

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.
@+


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Viewer

  • Similarité et duplicate content
    Cet outil vous permet de calculer la similarité entre 2 pages web. L'algorithme utilisé repose sur l'analyse des occurrences des mots (mais pas sur leur positionnement dans les pages). Google utilise cette notion à certains endroits dans son algorithme, mais de façon bien plus évoluée que ce petit outil... Avoir des pages trop similaires peut entraîner des problèmes d'indexation... Cet outil vous permettra peut-être de résoudre certains problèmes de contenus dupliqués.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité