Mini moteur de recherche
9 messages
• Page 1 sur 1
-

Doubrovski - WRInaute discret

- Messages: 84
- Inscription: 9 Avr 2011
Mini moteur de recherche
Bonjour,
Je code un mini moteur pour rechercher des images dans ma base de donnée.
J'ai une question sur mon code PHP.
J'utilise str_replace pour éliminer des mots inutiles de la requête tapée par l'utilisateur :
-J'ajoute des espaces autour de la requête.
-je supprime les mots indésirables quand ils sont entourés d'espaces.
-je supprime les espaces autour de la requête.
Je sais que les regex seraient une meilleure solution et je compte régler ça.
Mais j'ai un problème persistant. Le moteur permet de faire trois types de recherches :
-rechercher chaque mot (brique OU rouge -> tous les 'brique' et tous les 'rouge')
-rechercher le groupe de mot (comme %brique rouge% qui englobe aussi par exemple brique rouge jaune)
-rechercher l'expression exacte
Dans le premier type de recherche, il y a un problème : si l'utilisateur tape 2 espaces, le moteur recherche toutes les colonnes du champ de la bdd qui contiennent un espace.
Comment remplacer une suite d'espaces dont on ne connait pas le nombre d'espaces pour la remplacer par un seul espace ?
Merci !
Je code un mini moteur pour rechercher des images dans ma base de donnée.
J'ai une question sur mon code PHP.
J'utilise str_replace pour éliminer des mots inutiles de la requête tapée par l'utilisateur :
-J'ajoute des espaces autour de la requête.
-je supprime les mots indésirables quand ils sont entourés d'espaces.
-je supprime les espaces autour de la requête.
Je sais que les regex seraient une meilleure solution et je compte régler ça.
Mais j'ai un problème persistant. Le moteur permet de faire trois types de recherches :
-rechercher chaque mot (brique OU rouge -> tous les 'brique' et tous les 'rouge')
-rechercher le groupe de mot (comme %brique rouge% qui englobe aussi par exemple brique rouge jaune)
-rechercher l'expression exacte
Dans le premier type de recherche, il y a un problème : si l'utilisateur tape 2 espaces, le moteur recherche toutes les colonnes du champ de la bdd qui contiennent un espace.
Comment remplacer une suite d'espaces dont on ne connait pas le nombre d'espaces pour la remplacer par un seul espace ?
Merci !
- poulpe
- WRInaute discret

- Messages: 90
- Inscription: 29 Juin 2004
Re: Mini moteur de recherche
salut le plus simple est:
avec query qui contient la chaine de caracteres sur laquelle tu travailles.
- Code: Tout sélectionner
str_replace(' ', ' ', $query);
avec query qui contient la chaine de caracteres sur laquelle tu travailles.
-

Doubrovski - WRInaute discret

- Messages: 84
- Inscription: 9 Avr 2011
Re: Mini moteur de recherche
Merci !
J'avais essayé, et ça ne fonctionne que pour 2 espaces. Mais si il y en a 3 c'est le même problème.
Finalement cette solution fonctionne avec les regex :
"si l'espace et répété au moins 2 fois (ou plus) dans la variable $rec -> remplacer par un espace".
Ça fonctionne, mais le code est sale. Si je voulais faire ça proprement, il faudrait utiliser les REGEX à l'intérieur des requêtes SQL. Parce que mon code modifie la requête tapée par l'utilisateur. Si il tape "une brique rouge et verte", le champ se modifie pour marquer "brique rouge verte". Les modifs sont visibles.
A+ je vais essayer d'améliorer tous ça avec les regex, mais c'est compliqué...
J'avais essayé, et ça ne fonctionne que pour 2 espaces. Mais si il y en a 3 c'est le même problème.
Finalement cette solution fonctionne avec les regex :
- Code: Tout sélectionner
$rec = preg_replace("# {2,}#", " ", $rec);
"si l'espace et répété au moins 2 fois (ou plus) dans la variable $rec -> remplacer par un espace".
Ça fonctionne, mais le code est sale. Si je voulais faire ça proprement, il faudrait utiliser les REGEX à l'intérieur des requêtes SQL. Parce que mon code modifie la requête tapée par l'utilisateur. Si il tape "une brique rouge et verte", le champ se modifie pour marquer "brique rouge verte". Les modifs sont visibles.
A+ je vais essayer d'améliorer tous ça avec les regex, mais c'est compliqué...
- poulpe
- WRInaute discret

- Messages: 90
- Inscription: 29 Juin 2004
Re: Mini moteur de recherche
salut,
si tu veux enlever n importe quel type d espace.
Pour ton remplacement de variable suffit de faire une copie = $query = $_POST['query], et tu fais ton traitement sur query et tu reaffiches $_POST['query] pour l utilisateur.
Moi je ferais plutot les regex en PHP puis avec des IN et des OR dans mon sql suivant les operateurs. (en supposant que tu as un thesaurus attache a ta recherche)
- Code: Tout sélectionner
echo preg_replace('#[[:space:]]{2,}#', ' ', ' h h h h h' );
si tu veux enlever n importe quel type d espace.
Pour ton remplacement de variable suffit de faire une copie = $query = $_POST['query], et tu fais ton traitement sur query et tu reaffiches $_POST['query] pour l utilisateur.
Moi je ferais plutot les regex en PHP puis avec des IN et des OR dans mon sql suivant les operateurs. (en supposant que tu as un thesaurus attache a ta recherche)
-

Doubrovski - WRInaute discret

- Messages: 84
- Inscription: 9 Avr 2011
Re: Mini moteur de recherche
Merci.
Leonick > Ok ! J'utilise déjà un explode() mais mes requêtes SQL sont classiques (sans REGEXP). Je fais les modifs en php sur le $_GET['recherche']...
poulpe > Oui, je peux faire une copie dans une variable bonne idée.
Donc ça ne te parait pas indispensable d'utiliser les REGEXP dans le select de la bdd ?
J'arrive à m'en sortir avec les regex en php mais si j'essaie de les mettre avec le SQL, je bloque. Je vais devoir en apprendre un peu plus mais malheureusement ma doc sur les regex est très limitée sur la partie SQL.
Sinon je cherche également à supprimer les pluriels des recherches (tout est au singulier dans la bdd), ou à rendre facultatif les "S" en fin de mots.
Leonick > Ok ! J'utilise déjà un explode() mais mes requêtes SQL sont classiques (sans REGEXP). Je fais les modifs en php sur le $_GET['recherche']...
poulpe > Oui, je peux faire une copie dans une variable bonne idée.
Donc ça ne te parait pas indispensable d'utiliser les REGEXP dans le select de la bdd ?
J'arrive à m'en sortir avec les regex en php mais si j'essaie de les mettre avec le SQL, je bloque. Je vais devoir en apprendre un peu plus mais malheureusement ma doc sur les regex est très limitée sur la partie SQL.
Sinon je cherche également à supprimer les pluriels des recherches (tout est au singulier dans la bdd), ou à rendre facultatif les "S" en fin de mots.
- poulpe
- WRInaute discret

- Messages: 90
- Inscription: 29 Juin 2004
Re: Mini moteur de recherche
en fait pour la recherche y a plein de spossibilites:
1) tu fais un index full-text sur les champs pour lesquels tu veux chercher http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
2) tu 'tag' tes produits avec des mots:
tu associes n tags a n produits via une interface, par exemple les tags brique, rouge, vert a ta photo 'maison'.
tu fais une requete sur ta table d association avec where photo = maison et tag in rouge,vert,brique etc... ou bien du AND.
(moi je fais ca souvent car j ai le controle sur ce que je renvoi)
3) tu utilises un moteur de recherche deja developpe type lucene ou sphinx etc...
1) tu fais un index full-text sur les champs pour lesquels tu veux chercher http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
2) tu 'tag' tes produits avec des mots:
tu associes n tags a n produits via une interface, par exemple les tags brique, rouge, vert a ta photo 'maison'.
tu fais une requete sur ta table d association avec where photo = maison et tag in rouge,vert,brique etc... ou bien du AND.
(moi je fais ca souvent car j ai le controle sur ce que je renvoi)
3) tu utilises un moteur de recherche deja developpe type lucene ou sphinx etc...
-

Doubrovski - WRInaute discret

- Messages: 84
- Inscription: 9 Avr 2011
Re: Mini moteur de recherche
Ok. Je pense que j'ai déjà ces "tags" dont tu parles, j'ai un champ qui me permet de générer tous les attributs "alt" des images. Ça fait office de tags ou de mots clés. Le seul problème c'est que la couleur est donnée dans un autre champ. Donc je dois faire des recherches dans 2 champs différents. (il aurait mieux valu regrouper tous les mots clés y compris les couleurs dans un seul champ...).
Je vais regarder pour sphinx et lucerne, mais je ne pense pas avoir le niveau.
Je vais regarder pour sphinx et lucerne, mais je ne pense pas avoir le niveau.
- poulpe
- WRInaute discret

- Messages: 90
- Inscription: 29 Juin 2004
Re: Mini moteur de recherche
je voulais dire que tes mots cles doivent etre entres dans une table separee.
Avec ca, si tu nettoies la chaine avant l envoi, et que tu as un index sur le champ keyword dans ta table keyword tu as l equivalent d une recherche par tag, et tu asjoutes les regles que tu veux avec des clauses IN, ou AND dans ton SQL.
Quand tu ajoutes une image, il te suffit d associer les mots cles que tu veux.
- Code: Tout sélectionner
keyword(id, keyword)
image(id, path,....)
keywordImage(idkeyword, idImage, ....)
Avec ca, si tu nettoies la chaine avant l envoi, et que tu as un index sur le champ keyword dans ta table keyword tu as l equivalent d une recherche par tag, et tu asjoutes les regles que tu veux avec des clauses IN, ou AND dans ton SQL.
Quand tu ajoutes une image, il te suffit d associer les mots cles que tu veux.
9 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Mini moteur de recherche pour mon site
- Creer un mini moteur de recherche dans son site
- Mini moteur en PHP
- Pour un mini-mini site d'Ecommerce : OpenCart ? Prestashop ? Joomla ? ??
- Recherche de mini-vidéos gratuites sur Internet
- [Moteur] RefSeek : moteur de recherche académique
- mini mini boutique ecommerce
- Recherche base de données spécifique [Moteur de recherche]
- recherche script pour un moteur de recherche
- Google Mini VS Google Recherche Personnalisée
Consultez la description détaillée des produits ou services de Google suivants : Google Mini
- Logiciel de référencement AgentWebRanking
AgentWebRanking est un logiciel professionnel qui permet d'analyser le positionnement d'un ou plusieurs sites dans plus de 300 moteurs de recherche dans le monde. Vous pouvez ainsi analyser les performances du référencement pour de nombreux mots-clés. - Transformer des citations en liens
Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités


