Page 1 sur 2

Moteur de recherche interne pour un portail

Posté : 20 juin 2009, 08:39
par Fredy07
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

Posté : 20 juin 2009, 10:23
par Berzemus
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.

Re: Moteur de recherche interne pour un portail

Posté : 20 juin 2009, 15:22
par Nagol
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? :)

Posté : 21 juin 2009, 06:48
par Fredy07
J'ai pas compris ces 2 lignes:
    ->   FULLTEXT (title,body)

et

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


Posté : 22 juin 2009, 21:51
par Nagol
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? :)

Posté : 23 juin 2009, 01:12
par Fredy07
Ce que j'ai compris 'database' est le mot a rechercher, alors (title,body) c'est quoi??

Posté : 23 juin 2009, 03:55
par Nagol
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?

Posté : 23 juin 2009, 04:05
par Fredy07
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 :!:

Posté : 23 juin 2009, 07:20
par Nagol
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

Posté : 23 juin 2009, 08:20
par Fredy07
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.

Posté : 23 juin 2009, 09:53
par Nagol
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...

Posté : 24 juin 2009, 02:30
par Fredy07
Alors on revient toujours au debut, c'est quoi la meilleur solution d'introduire un moteur de recherche dans un portail.

Posté : 24 juin 2009, 10:03
par Berzemus
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.

Posté : 24 juin 2009, 10:38
par Fredy07
Alors est ce que la meme methode utilisee sur phpfrance?

Posté : 25 juin 2009, 12:17
par Fredy07
Donc la meilleur solution c'est de le faire manuellement, inserer les donnees dans une table X et effectuer la recherche dans cette table.

:?: :?: