J'ai besoin d'un moyen de faire une recherche dans plus de 50 colonnes, varchar et int, dans une table spécifique. J'ai vu des gens recommander Lucene et Sphinx, mais je n'ai aucune idée de comment les utiliser et le Full-Text de MySQL ne me permettra pas de combiner plus de 16 colonnes ou les deux colonnes varchar et int.Recherche PHP et MySQL sur plusieurs colonnes
Répondre
Si votre table ne reçoit pas beaucoup de mise à jour ou si un délai avant que les modifications soient reflétées dans la recherche est acceptable, vous pouvez peut-être créer une table dérivée périodiquement régénérée qui combine toutes vos colonnes dans un LONGTEXT
. index de texte intégral sur cela.
Vous pourriez envisager de faire pivoter votre table et de la hacher un peu. Prenez toutes vos colonnes varchar et stockez les données dans une table "Search_Strings"; faire la même chose pour les colonnes int:
table originale
id
always_field1
always_field2
varstring1
...
varstringx
int1
...
inty
nouvelle main_table (même nombre de lignes que le tableau original, mais très peu de colonnes)
id
always_field1
always_field2
Search_Strings (
id (FK to main_table)
old_column_name
string_value
Search_Ints
id (FK to main_table)
old_column_name
int_value
Avec cette configuration, vous avez besoin d'un index de texte intégral uniquement sur string_value. Désolé, je ne peux rien suggérer avec Sphinx ou Lucene car je ne les connais pas.
Pour indexer cette table de chaînes à l'aide de Sphinx, il vous suffit de vous assurer que la table "strings" possède une clé id unique (pensez à des séquences). cf: http://www.postneo.com/2009/02/06/sphinx-search-with-postgresql –
- 1. Recherche sur plusieurs colonnes dans NHibernate
- 2. Recherche plein texte MySQL sur plusieurs tables
- 3. mySQL recherche dans plusieurs lignes
- 4. plusieurs colonnes distinctes dans une base MySQL
- 5. Recherche de plusieurs tables avec MySQL
- 6. mysql plusieurs requêtes avec php
- 7. php et la recherche de MySQL et les variables problème
- 8. MySQL Select Instruction DISTINCT pour plusieurs colonnes
- 9. DataView.RowFilter, plusieurs valeurs possibles sur plusieurs colonnes
- 10. Colonnes PHP/Mysql imageid, catid, imagedate, userid
- 11. Clé étrangère à plusieurs colonnes dans MySQL?
- 12. Plusieurs colonnes après un WHERE en PHP?
- 13. Compter sur plusieurs colonnes DISTINCT
- 14. Recherche par mot-clé, plusieurs tables, PHP et Mysql, Quels membres utiliser?
- 15. Question MySQL: Index sur les colonnes!
- 16. PHP MySQL Ordre par deux colonnes
- 17. PHP Inheritance et MySQL
- 18. MySQL plusieurs tables et plusieurs lignes
- 19. ASP.NET Recherche sur plusieurs paramètres
- 20. PHP et MySQL hit counter plusieurs pages comptent problème?
- 21. mysql recherche plein texte avec des colonnes nulles
- 22. Utiliser plusieurs tables dans MySQL et/ou plusieurs colonnes pour une application Rails
- 23. Comment afficher plusieurs valeurs en utilisant php et mysql?
- 24. PHP et mysql proc
- 25. SQL Valeur absolue sur plusieurs colonnes
- 26. Mysql rejoindre sur des colonnes similaires
- 27. COUNT Mysql (*) sur plusieurs tables
- 28. Comment faire pour rechercher plusieurs colonnes d'une table dans MySQL?
- 29. MySql variables et php
- 30. Connexions PHP et MySQL
le problème est qu'il y a environ 65 000 lignes à ce stade, environ 500 étant ajoutées chaque semaine. –
Si les 500 sont dans un lot, plutôt que de manière aléatoire, il serait facile de régénérer la table dérivée après le lot. En supposant que les insertions viennent à des moments aléatoires, cependant, 500 par semaine est toujours seulement un peu plus d'une heure en moyenne. Vous pourriez probablement lancer un job cron toutes les minutes qui régénérerait la table dérivée si des changements avaient été faits et ne ressentiraient aucune douleur particulière. – chaos
+1 pour une table dénormalisée avec des index MySQL FULLTEXT. Cependant, je considérerais le sphinx comme une première option. –