2011-04-12 4 views
0

J'ai un tableau des messages du forum, et je veux améliorer la fonctionnalité de recherche de base car nous recevons beaucoup d'utilisateurs de partout dans le monde qui ne sont pas natifs et qui auront du mal à trouver des résultats quand ils épellent incorrectement. La recherche actuelle sur le forum est exacte.Meilleure façon de concevoir une recherche basée sur soundex

Lequel de ces modèles fonctionnera le mieux? Supposons que la base de données contient 500 000 enregistrements et que la recherche soit fréquemment utilisée. Idéalement, je voudrais qu'il recherche tous les enregistrements.

Design Un

À côté de chaque poste de forum, je stocke soundex_post, qui contient toutes les données soundex. Lorsqu'une recherche est exécutée, elle extrait tous les termes de recherche et effectue une opération LIKE sur les champs soundex.

Design Deux

Je normer. Chaque code soundex est stocké dans une nouvelle table, tblSoundexCodes. Ensuite, il y a une table tblForumPostSoundexCodes:

ID | Post_ID | SoundexCode_ID | Count

Ensuite, lorsqu'un soundex est recherché, je RETIREz tous les Post_IDs où SoundexCode_ID = n

Ai-je raison cette méthode deux sera beaucoup plus rapide, mais il sera beaucoup plus difficile à maintenir (IE, lorsque les gens éditent des messages).

+0

Quelle est votre base de données cible? Si c'est Oracle, la recherche soundex est déjà disponible pour vous. –

+0

@Frank est MSSQL, probablement uniquement en édition express, et j'ai utilisé soundex comme exemple. Je vais probablement implémenter un algorithme plus à jour –

Répondre

1

Design Deux est meilleur.

La conception deux ne sera pas plus rapide. Le stockage de données sera plus compact, et vous devrez mettre à jour ou insérer une ligne dans tblForumPostSoundexCodes, ainsi qu'insérer une ligne dans tblSoundexCodes, quand quelqu'un écrit ou met à jour un post.

Vous devrez vérifier que ce traitement de transaction soundex a lieu pour chaque modification apportée à une publication (création, mise à jour, suppression).

1

J'ai quelques doutes sur votre idée.

Prenons votre propre réponse à l'un des commentaires:

« @Frank est MSSQL, probablement va être édition express, et j'utilisé soundex comme exemple, je vais probablement mettre en œuvre un plus à algorithme de date "

Ce simple commentaires a 15 mots (j'ai écarté les plus courts que 4 caractères). Vous aurez donc potentiellement 15 enregistrements différents pointant ici avec la valeur "1". Et si je, un anglophone non-natif, décidais de chercher ("esample" et "dait")?

Offrez-vous la possibilité de rechercher plus d'un mot? Avec et-? ou-? ne pas-?

N'est-il pas préférable d'exécuter la recherche telle quelle et de fournir "peut-être vous cherchez 'Exemple et Date'?" comme Google ou Wikipedia faire?

Questions connexes