MySQL αναζήτησης πλήρους κειμένου

Σήμερα έπαιξα για να βελτιστοποιήσετε μια αργή SQL Τύπος αίτησης

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

Πού είναι το ενοχλητικό μία στιγμή εδώ – το τελευταίο μέρος λέξη % ‘ %’ και στην ακόμη μεγαλύτερη αρετή χαρακτήρες % πριν από τη λέξη, για αυτό που κάνουμε. Σύμβολο μπαλαντέρ % ,πριν από οποιαδήποτε τιμή, η εφαρμογή μας απευθείας μεταφράζεται άμεσα σε μια αργή, διότι με αυτό τον τρόπο η εφαρμογή σταματά να χρησιμοποιήσουμε τα ευρετήρια από την. Όπως πάντα υπάρχουν λύσεις, αλλά δεν είναι πάντα σαφές 😆 γενικά MySQL έχετε μια λύση στο πρόβλημα αυτό με Αναζήτηση πλήρους κειμένου Δημιουργία ευρετηρίου για το. Πώς είναι η αλλαγή του πεδίου εκεί είναι γραμμένο πολύ στην τεκμηρίωση, αλλά σε μια βιασύνη θα περιγράψω πώς μπορώ να αλλάξω το κορυφαίο αίτημα, επειδή θα φτάσουμε τελικά σε ένα μικρό δράμα. Συνθέτουν ένα χαριτωμένο, όπως ισχύουν για το πεδίο πλήρους κειμένου, το ερώτημα πρέπει να αλλάξει με τη μορφή:

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

Έτσι, η δομή είναι προφανής και δεν υπάρχει καμία ανάγκη για άσκοπη συζήτηση. Το παραπάνω ερώτημα θα τεθεί σε ισχύ, Εάν η λέξη, για τα οποία κάνετε μια αίτηση τουλάχιστον 4 το σύμβολο, Αυτή είναι η προεπιλεγμένη τιμή, Εάν θέλετε να τροποποιήσετε, πρέπει να καθορίσετε την τιμή, която желаете в my.cnf в частта [mysqld] με τη δήλωση χρησιμοποίηση= 3 ή 2, 1 не е добър избор очевидно 😉 . Αφού αλλάξετε την τιμή και κάντε επανεκκίνηση του διακομιστή mysql-πρέπει να κάνει μια επισκευή των πινάκων, για τη νέα δημιουργία ευρετηρίου που τίθεται σε ισχύ. Εδώ όλα τα σαφή: αλλάζετε, Μπορώ να επαναφέρετε, rebildvam δείκτες και να κάνουν αίτηση και επιστρέφει μου 0 Έλεγχος γραμμής με 😀

SHOW VARIABLES

Βλέπω ότι οι τιμές, Έχω ρωτήσει έχουν τεθεί σε ισχύ, rebildvam ευρετήρια και πάλι – ίδιο αποτέλεσμα. 🙄 Μίσους, πολύ άβολα. ОТ ТУК НАТАТЪК ЗАПОЧНА ЕДНО ГОЛЯМО РУГАЕНЕ И РОВЕНЕ ЗА КЛЮЧА ЗА БАРАКАТА 😀 КОЙТО СЕ ОКАЗА ДОСТА, ДОСТА ИНТЕРЕСЕН. КАТО ЦЯЛО, КАТО ЗАПОЧНАХ ДА ЧЕТА ДОКУМЕНТАЦИЯТА ЗА НЕ ЗНАМ КОЙ ПЪТ И СТИГНАХ ДО ЕДИН ИНТЕРЕСЕН ПАСАЖ

Such a technique works best with large collections (Στην πραγματικότητα, ήταν προσεκτικά συντονισμένοι με τον τρόπο αυτό). Για τους πολύ μικρούς πίνακες, λέξη διανομής δεν αντικατοπτρίζει επαρκώς την σημασιολογική αξία τους, και αυτό το μοντέλο μπορεί να παράγει μερικές φορές παράξενα αποτελέσματα. Για παράδειγμα, Αν και η λέξη «MySQL» είναι παρούσα σε κάθε γραμμή του πίνακα άρθρα που εμφανίζεται παραπάνω, μια αναζήτηση για τη λέξη παράγει κανένα αποτέλεσμα

ГРЕДА 😳 Дам табличката ми беше малка – Ήταν ακόμα μια δοκιμή. Σε ένα μεγάλο εφαρμογή πίνακα Naših με πάνω από 2 000 000 τάξη και εκεί τα πράγματα είναι κοιμισμένοι. Καλά είναι ήδη σαφές το πρόβλημα. Να καταστήσει σαφές η λύση, Θα αναφέρω εν συντομία, η υποστήριξη αναζήτησης πλήρους κειμένου 3 Προηγμένες λειτουργίες ΜΠΟΥΛ , ΕΚΦΡΆΣΕΙΣ και ΦΥΣΙΚΉΣ ΓΛΏΣΣΑΣ καθώς η τελευταία λειτουργεί από προεπιλογή. Σχετικά με τους διαφορετικούς τρόπους που μπορείτε να ελέγξετε την τεκμηρίωση, Θα εξηγήσουμε με 2-3 λέξεις σε BOOLEAN, επειδή είναι το κλειδί. Υποστηρίζει λογικούς τελεστές του τύπου και, Ή , ΌΧΙ και ούτω καθεξής και μπορεί να κάνει κάποιο μαγικό με τις φράσεις αναζήτησης, να έχουν μια, υπάρχει μια άλλη, κλπ.. Υποστηρίζει και το σύμβολο *, Αυτό είναι ισοδύναμο με χαρακτήρες μπαλαντέρ % 😉 είναι χρήσιμο, Όταν ο όρος αναζήτησης είναι το μήκος της χρησιμοποίηση ή τους μικρούς δίσκους ;). Τουλάχιστον για μένα στο τραπέζι με σχετικά με 100 η γραμμή είναι κάνει μια τέλεια δουλειά. Το μόνο που απομένει να δούμε και την εφαρμογή τελικών:

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

Τώρα εδώ έρχεται μια στιγμή ευρετηρίου λειτουργεί με εμάς χαρακτήρες μπαλαντέρ – η απάντηση είναι δεν ξέρω. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Ενισχυμένη από Zemanta

2 comments

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

Αφήνω μια απάντηση

Διεύθυνση ηλεκτρονικού ταχυδρομείου σας δεν θα δημοσιευθεί. Υποχρεωτικά πεδία επισημαίνονται *

Αντισπαμικό *