MySQL Texte intégral Recherche

Aujourd'hui, j’ai joué pour optimiser une lente SQL type de requête

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Où est la gênante un instant ici – la dernière partie mot % ‘ %’ et même des caractères plus concret % après le mot, pour cela, nous faisons. Symbole de caractère générique % ,avant que toute valeur, notre application directement traduit directement en un lent, parce que de cette manière l’application cesse de nous pour utiliser les index de la. Comme toujours, il existe des solutions, mais ne sont pas toujours clair 😆 généralement MySQL vous avez une solution à ce problème avec recherche en texte intégral Indexation de la. Comment est le changement du champ il est beaucoup écrit dans la documentation, mais à la hâte, je vais décrire comment changer la demande en haut de la page, parce que nous aurons enfin un petit drame. Composent un mignon comme applicable au champ de texte intégral, la requête doit être modifié dans l’écran:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Si la structure est évidente et il n’y a aucun besoin de discussion inutile. La requête ci-dessus entreront en vigueur, Si le mot, pour lequel vous présentez une demande au moins 4 le symbole, C’est la valeur par défaut, Si vous souhaitez le modifier, vous devez spécifier la valeur, която желаете в my.cnf в частта [mysqld] avec la déclaration ft_min_word_len= 3 ou 2, 1 не е добър избор очевидно 😉 . Après que vous modifiez la valeur et redémarrez le serveur mysql-besoin de faire une réparation de tables, afin que la nouvelle indexation entrera en vigueur. Ici tout est clair: peut-on changer, J’ai réinitialiser, rebildvam indices et faire ma demande et retours 0 Vérification de ligne avec 😀

SHOW VARIABLES

Je vois que les valeurs, Je me pose sont entrés en vigueur, rebildvam index nouveau – même résultat. 🙄 Haine, très mal à l’aise. ОТ ТУК НАТАТЪК ЗАПОЧНА ЕДНО ГОЛЯМО РУГАЕНЕ И РОВЕНЕ ЗА КЛЮЧА ЗА БАРАКАТА 😀 КОЙТО СЕ ОКАЗА ДОСТА, ДОСТА ИНТЕРЕСЕН. КАТО ЦЯЛО, КАТО ЗАПОЧНАХ ДА ЧЕТА ДОКУМЕНТАЦИЯТА ЗА НЕ ЗНАМ КОЙ ПЪТ И СТИГНАХ DIZININE ЕДИН ИНТЕРЕСЕН ПАСАЖ

Such a technique works best with large collections (En fait, elle était soigneusement réglé de cette façon). Pour les très petites tables, distribution de mot ne reflète pas adéquatement leur valeur sémantique, et ce modèle peut parfois produire des résultats bizarres. Par exemple, Bien que le mot « MySQL » est présent dans chaque ligne de la table articles présentée plus haut, une recherche du mot ne produit aucun résultat

ГРЕДА 😳 Дам табличката ми беше малка – C’était encore un test. Dans une table de Naših grande application avec plus de 2 000 000 ordre et les choses y sont endormis. Eh bien, il est déjà clair le problème. Afin d’indiquer clairement la solution, Je mentionnerai brièvement, ce soutien de recherche de texte intégral 3 Modes avancés BOOLEAN , EXPRESSIONS et LANGAGE NATUREL comme les dernières œuvres par défaut. Sur les différents modes, vous pouvez consulter la documentation, Je vais vous expliquer avec 2-3 parce que c’est la clé des mots en booléen. Il prend en charge les opérateurs logiques du type et, OU , PAS et ainsi de suite et peuvent faire peu de magie avec les expressions de recherche, d’avoir un, y a-t-il un autre, etc... Supports et symbole *, C’est l’équivalent des caractères génériques % 😉, il est utile, Lorsque le terme recherché est la longueur de la ft_min_word_len ou plateaux ;). Au moins pour moi à la table avec tout 100 la ligne fait un travail parfait. La seule chose qui reste à voir et à l’application finie:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Maintenant, voici un temps d’indexation des œuvres avec nous des caractères génériques – la réponse est que je ne sais pas. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Amélioré par Zemanta

0 commentaires

    1. Е при големи таблици вече има други решения 😉 partitions да речем или други механизмни за fulltext search като Sphinx

Laisser une Réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont marqués *

Anti-SPAM *