Moteur de recherche interne pour un portail

Fredy07
Invité n'ayant pas de compte PHPfrance

20 juin 2009, 08:39

Bonjour,

C'est quoi la bonne idee de coder un moteur de recherche interne pour un portail qui contient des milliers de pages.

Merci pour vos suggestions

ViPHP
ViPHP | 4039 Messages

20 juin 2009, 10:23

De ne pas en faire un, à moins de vouloir comprendre le fonctionnement d'un moteur de recherche.

Dans la plupart des cas, si les pages sont stockées dans une base de données, utiliser le moteur de recherche interne à la base de données (pas de like % % !! Mais plutôt la recherche de texte intégral, comme chez MySQL) est souvent la meilleure des solutions.

Bien lire la doc, s'assurer de bien utiliser ce que permettent les différentes fonctionnalités, constitué déjà un bon départ.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 3300 Messages

20 juin 2009, 15:22

Bonjour,

C'est quoi la bonne idee de coder un moteur de recherche interne pour un portail qui contient des milliers de pages.

Merci pour vos suggestions
pas compris, tu peux nous la refaire avec la forme au lieu de balancer des mots au hazard? :)
Fait du php depuis que ca existe ou presque :)

Fredy07
Invité n'ayant pas de compte PHPfrance

21 juin 2009, 06:48

J'ai pas compris ces 2 lignes:
    ->   FULLTEXT (title,body)

et

mysql> SELECT * FROM articles
    ->          WHERE MATCH (title,body) AGAINST ('database');


ViPHP
ViPHP | 3300 Messages

22 juin 2009, 21:51

c'est ca la recherche fulltext, en gros mysql te crée un index sur les colonnes, et tu peux matcher une recherche à l'intérieur. spadur si? :)
Fait du php depuis que ca existe ou presque :)

Fredy07
Invité n'ayant pas de compte PHPfrance

23 juin 2009, 01:12

Ce que j'ai compris 'database' est le mot a rechercher, alors (title,body) c'est quoi??

ViPHP
ViPHP | 3300 Messages

23 juin 2009, 03:55

les champs.

le truc qui te trouble je pense c'est que dans cet exemple il y'a deux champ indexés, title et body, imagines un mail tu veux pouvoir rechercher un expression (database) dans le titre ET le corps du mail :) c'est pour ça, mais le cas peut etre plus simple, tu peux créer un index fulltext sur une colonne unique, et faire des recherches du genre

Code : Tout sélectionner

SELECT * FROM articles WHERE MATCH (title) AGAINST ('database');
ce qui te retournerais tous les enregistrements dont le titre contient 'database'

tu vois?
Fait du php depuis que ca existe ou presque :)

Fredy07
Invité n'ayant pas de compte PHPfrance

23 juin 2009, 04:05

Oui je vois, merci Nagol

Alors suppons que j'ai 2 ou plusieurs tables, la requete serait:
SELECT * FROM table1, table2 WHERE MATCH (title1,body1), (title2,body2) AGAINST ('database');
Je ne sais pas si c'est correct :!:

ViPHP
ViPHP | 3300 Messages

23 juin 2009, 07:20

alors je suis pas le plus utilisateur de base de donnée du monde mias à mon avis (et j'espere qu'on me corigera si c'est pas le cas)

je pense que la requete irait (fortement au conditionel) plutot comme ça:

Code : Tout sélectionner

SELECT * FROM table1, table2 WHERE MATCH (table1.title1,table1.body1,table2.title2,table2.body2) AGAINST ('database');
en supposant qu'on puisse créer un index fulltext sur plusieurs tables, ce qui me semble improbable
Fait du php depuis que ca existe ou presque :)

Fredy07
Invité n'ayant pas de compte PHPfrance

23 juin 2009, 08:20

C'est la raison sur laquelle je veux avoir un bon moteur de recherche, tout en terminant le site, avec des tables bien sur, je code mon moteur ou je vais mettre aller chercher le mot x sur les tables qui existent dans la BD y.

ViPHP
ViPHP | 3300 Messages

23 juin 2009, 09:53

c'est un cas d'utilisation improbable d'une base de donnée, j'aurais tendance à penser que c'est un besoin du à une mauvaise conception de la base...
Fait du php depuis que ca existe ou presque :)

Fredy07
Invité n'ayant pas de compte PHPfrance

24 juin 2009, 02:30

Alors on revient toujours au debut, c'est quoi la meilleur solution d'introduire un moteur de recherche dans un portail.

ViPHP
ViPHP | 4039 Messages

24 juin 2009, 10:03

Vouloir rechercher dans plusieurs tables serait, comme le disait nagol, dû à une mauvaise conception de la BD. Dans l'idéal, le contenu textuel est dans une seule table.

Le mieux est de faire une table spéciale dans lequel on insère le contenu sous une forme "préparée/normalisée" (sans mots trop communs, trop courts, sans accents et sans majuscules), sur laquelle on va exécuter la requête de recherche, ce qui livrera un identifiant qui correspondra à un contenu bien réel et affichable dans la DB.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Fredy07
Invité n'ayant pas de compte PHPfrance

24 juin 2009, 10:38

Alors est ce que la meme methode utilisee sur phpfrance?

Fredy07
Invité n'ayant pas de compte PHPfrance

25 juin 2009, 12:17

Donc la meilleur solution c'est de le faire manuellement, inserer les donnees dans une table X et effectuer la recherche dans cette table.

:?: :?: