MySQL повний пошук тексту

Сьогодні я грав оптимізувати повільний SQL тип запиту

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

Де знаходиться на клопітно один момент тут – Остання частина слова % ‘ %’ і в навіть більше конкретність символів % перед словом, для цього ми робимо. Символ узагальнення % ,перед будь-яким значенням, Наша заявка безпосередньо перекладає безпосередньо повільний, тому, що таким чином застосунок зупиняється нам використовувати показниками на. Як завжди є рішення, але не завжди чітко 😆 взагалі MySQL у вас є рішення цієї проблеми з FULLTEXT пошук Індексацію на. Як змінити поле там є багато написано в документації, але поспішайте я опишу, як змінити верхній запит, тому що ми отримаємо трохи драми нарешті. Складають милі як застосовне до fulltext поля, запит треба змінити у вигляді:

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

Таким чином структуру очевидна, і немає необхідності для непотрібну дискусію. Цей запит вступить в силу, Якщо слово, для яких ви робите запит принаймні 4 символ, Це значення за промовчанням, Якщо ви хочете, щоб змінити його, необхідно вказати значення, която желаете в my.cnf в частта [туздИ] з декларації ft_min_word_len= 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 слова в бульових тип, тому що це ключ. Він підтримує логічні оператори типу і, OR , НЕ і так далі і можуть робити деякі magic з пошукових фраз, мати на, Чи є інший, і т. д.. Підтримує і символ *, що є еквівалентом символів узагальнення % 😉 Це корисно, Коли пошуковий термін знаходиться в довжину в ft_min_word_len або невелика лотки ;). Принаймні мені за столом з про 100 лінії робить ідеальну роботу. Єдине, що залишилося щоб побачити і готової застосування:

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

Тепер тут приходить час індексування працює з нами символів узагальнення – Відповідь є не знаю. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Посилюється Zemanta

2 comments

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

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля помічені *

Захист від спаму *