Recherche dans un annuaire

25 réponses
AuteurMessage

erwinol |
Membre

Photo de erwinol

Inscrit le : 09/05/2005

# Le 26/07/2006 à 10:09

Bonjour à tous !

Je dispose d'un annuaire contenant des milliers de catégories et des centaines de milliers de sites.

Je voudrais trouver une solution optimale pour faire une recherche dans cet annuaire.

Les tables actuellement sont des tables mySQL de type InnoDB.

J'avais pensé à 2 solutions. Vous pourrez peut-être m'aider à choisir voir même me donner une meilleure solution. Je suis conscient qu'il suffirait que je teste les 2 solutions mais j'ai pas énormément de temps le soir après le taff.

1) Dupliquer les données sur lesquelles je veux réaliser les recherches. Je les places dans une table myISAM avec des champs en fulltext et l'id du site.

Ca me permettra de faire les recherches aisément sur des champs fulltext.

2) Je crée une table de correspondance mot/idsite/nombre d'occurences. Je parcourt donc tous mes enregistrements, je sépare les mots, et je construit cette nouvelle table.

Je n'aurai donc qu'à sélectionner les sites pour lesquels je trouve le mot de la recherche avec un "order by nboccur desc".

Votre avis ?

Merci d'avance.

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 26/07/2006 à 10:33

Les recherches FULLTEXT, as tu déjà essayé "en vrai" ? Pour ma part j'en suis très déçu : la pertinence du truc est très médiocre, le fait d'ignorer les mots de moins de 4 lettres très pénalisant, et sortir les résultats ne contenant pas tous les mots embrouille tout le monde. Enfin, je n'ai approfondi la question, c'est peut être "configurable"...

L'avantage de la deuxième solution, c'est que tu peux faire un algo un peu plus intelligent (prise en charge partielle de synonymes, conjugaisons, accords, etc). Par contre, impossible de gèrer les expressions de plusieurs mots...

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

erwinol | Erwin
Membre

Photo de erwinol

Inscrit le : 09/05/2005

# Le 26/07/2006 à 11:43

Non je n'ai jamais utilisé les recherches FULLTEXT. Je pensais que ça marchait pas mal.

Pour la 2ème solution, je n'ai pas pour projet de gérer les synonymes, conjugaison, etc..

Par contre, je dois absolument pouvoir gérer les expressions de plusieurs mots, l'idée de base étant d'avoir des résultats contenant TOUS les mots de l'expression recherchée, mais pas forcément contigus ou dans l'ordre.

Alex | Alexis
Membre

 

Inscrit le : 08/08/2005

# Le 26/07/2006 à 12:01

anur.net ne passe pas sous Firefox...

erwinol | Erwin
Membre

Photo de erwinol

Inscrit le : 09/05/2005

# Le 26/07/2006 à 12:11

Oui je sais, mais ce site est à l'abandon. D'ailleurs je vais le retirer de ma signature.

midtownmad | Ronan
Membre

 

Inscrit le : 09/05/2005

# Le 26/07/2006 à 15:37

Pourquoi ne pas mettre le soundex des mots au lieu des mots eux-même dans ta table ? pour ta seconde solution.

midtownmad (dit gigi par ses amis)
http://www.macreators.comOuvrir dans une nouvelle fenetre

erwinol | Erwin
Membre

Photo de erwinol

Inscrit le : 09/05/2005

# Le 26/07/2006 à 16:15

Parce qu'il ne s'agit pas d'un annuaire en anglais et que le SOUNDEX se base sur une consonnance anglophone.

J'avais fait des tests l'année dernière sur du soundex et je n'étais pas très satisfait du résultat.

radins | Tobias
Modérateur

Photo de radins

Inscrit le : 09/05/2005

# Le 26/07/2006 à 16:41

Et EXSON marche pas..?



-> []

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 26/07/2006 à 16:48

Implémente Soundex 2 ou Phonex dans une procédure mysql
http://www-lium.univ-lemans.fr/~carlier/recherche/...Ouvrir dans une nouvelle fenetre

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

superfc | Florent
Membre

Photo de superfc

Inscrit le : 01/07/2006

# Le 26/07/2006 à 20:55

FULLTEXT marche pas mal. Mais c'est pas spécialement rapide et la contrainte du MyISAM pour une grosse base de données est assez chiante.
L'avantage du FULLTEXT, c'est que c'est largement plus simple à gérer.

Je te conseille de faire un index des mots (2 ème solution). Par contre, ça va être plus chiant à gérer, essaye d'utiliser les clès étrangères.
Et avec InnoDB, t'as l'énorme avantage du transactionnel.

Florent Clairambault - http://florent.clairambault.frOuvrir dans une nouvelle fenetre
Gtalk : superfc@gmail.com

midtownmad | Ronan
Membre

 

Inscrit le : 09/05/2005

# Le 28/07/2006 à 06:20

Il suffit de créer ta propre fonction soundex avec les valeurs pour chaque lettre en français.

midtownmad (dit gigi par ses amis)
http://www.macreators.comOuvrir dans une nouvelle fenetre

erwinol | Erwin
Membre

Photo de erwinol

Inscrit le : 09/05/2005

# Le 28/07/2006 à 08:56

Je vais faire simple et opter pour ma seconde solution, ce sera amplement suffisant

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 28/07/2006 à 09:25

Si tu mets tous les mots dans une table pour y associer un "id" de cette forme :
id_mot | mot

Ajoute un champs qui contient les deux premiers caractères du mot comme ceci :
id_mot | cc | mot

avec cc indexé.

Quand tu rechercheras l'id d'un mot, cherche avec :
`cc` = '" . substr($mot, 0, 2) . "' " .
AND `mot` = '" . $mot . "'

Ca ira bcp plus vite

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Limit | Cyril
Membre

Photo de Limit

Inscrit le : 11/05/2005

# Le 28/07/2006 à 11:37

euh rano ca sert à quoi ce que tu fais? il suffit d'indexer les 2 premiers caractères de 'mot' et ca fait exactement pareil.

Forum GratuitOuvrir dans une nouvelle fenetre - Blog gratuitOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 28/07/2006 à 12:42

Ouais je pense que ca fait exactement pareil en effet vu que tu répètes ce que j'ai expliqué

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 28/07/2006 à 13:07

Non : au lieu de créer un champ avec une copie du mot, tu crées directement un index sur les 2 premiers caractères de ton champ "mot".

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 28/07/2006 à 13:20

CQFD, c'est à ça que sert le champ taille dans PMA quand tu ajoutes un index

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 28/07/2006 à 13:37

Ah ok... si vous le dites J'ai dépouillé des dizaines de moteur de recherches en php et tous faisait ce que j'ai expliqué, mais peut etre que tous se gourent en effet

Edit : Ayant déjà "mot" en "unique", phpMyAdmin me prévient que : "La colonne `mot` ne devrait pas faire partie à la fois d'une clé unique et d'une clé index" (après avoir ajouté un index sur les 2 premiers caractères)



(Message édité le 28-07-2006 à 13h43 par Rano)

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 28/07/2006 à 14:04

bah en théorie ce genre de bidouilles n'a pas vraiment lieu d'être non plus... ça sert souvent à palier des problèmes d'optimisation du SGBD, ce qui veut dire qu'au fil des versions ça peut changer (on a eu ça une fois au taff, quelques centaines de scripts PL/SQL à reprendre car nos "bidouilles" devenaient plus néfastes qu'autre chose).

Sinon pour phpMyAdmin, bah... ça reste un mini controle "automatique"... Le mieux est sans doute de tester

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 28/07/2006 à 15:12

+1, myadmin n'est pas toujours à même de comprendre pourquoi j'ai besoin d'un unique (empecher 2 lignes de même valeur) et d'un index quand même...

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 9:55:49 | Généré en 9.12ms | Contacts | Mentions légales |