2009-12-05 10 views
0

J'ai une base de données MySQL que je réplique à partir d'un autre serveur. La base de données contient une table avec ces colonnesRecherche de noms de fichiers dans la base de données MySQL restreinte par type de fichier?

ID, FileName et FileSize

Dans le tableau il y a plus de 4'000'000 dossiers. Je veux faire une recherche rapide dans la colonne FileName (varchar)

J'ai trouvé que je peux utiliser pour ce moteur de recherche Sphinx. Le problème est que je veux restreindre les recherches par type de fichier. Dois-je et comment (triggers?) Extraire les extensions de fichier pour toutes les lignes? Peut-être que je dois créer une autre table (parce que celle-ci est répliquée) et les joindre dans une relation 1: 1?

Pouvez-vous me donner quelques conseils s'il vous plaît :)

Répondre

-1

Pourquoi ne pas utiliser une requête SQL avec un Regex?

Faire quelque chose comme ...

.$query.\.$extension 

qui correspondrait wildcard le terme de recherche dans le nom de fichier, puis une période, le nom de l'extension.

+0

Je pense que ce type de recherche n'est pas bien optimisé (d'après ce que je sais des index) Une autre raison est que je devrais faire quelques transformations de nom de fichier, par exemple "MyPicture.jpg" colonne Image "(avec espace) et colonne" jpg "(filetype) –

0

Vous aurez certainement envie de séparer le type de fichier dans une colonne séparée - cela vous permettra de diriger une recherche Sphinx sur ce terme (avec le mode de correspondance réglé sur étendu):

normal query terms @filetype jpg 

Cependant, Ce n'est pas exact - il utilisera toujours l'intelligence de Sphinx autour des mots et autres. Cela peut être ce que vous voulez, mais si vous ne le faites pas, je recommande de normaliser votre DB et de mettre les types de fichiers dans une autre table, et d'avoir une clé étrangère dans votre table de fichiers. Ensuite, vous pouvez utiliser cet entier comme attribut dans votre configuration Sphinx, et filtrer dessus en utilisant l'identifiant du type de fichier particulier. Ce sera plus rapide et plus fiable dans Sphinx, mais c'est un peu plus de travail.