Повнотекстовий пошук для mysql за допомогою fulltext індексів

MySQL підтримує FULLTEXT індекси з версії 3.23, це дозволяє виробляти пошук по всьому тексту для стовпців з типами VARCHAR і TEXT за допомогою певного SQL виразу. Для початку нам потрібно створити цей самий FULLTEXT індекс. Приклад коду:

ALTER TABLE articles ADD FULLTEXT (title. Content);

Таким не складним виразом ми додали FULLTEXT індекс для полів title і content таблиці articles. Як бачите, FULLTEXT індекс можна додати для декількох стовпців відразу. Як же тепер виконати пошук? Дуже просто:

SELECT title. content FROM articles

WHERE MATCH (title. Content) AGAINST ( 'Пошук в MySQL');

Таким не складним виразом ми виберемо з таблиці articles поля title, content всіх записів, де MySQL знайде словосполучення «Пошук в MySQL» в шпальтах title, content. Пошук виконується без урахування регістру символів. Крім того, MySQL сортує результати в порядку убування релевантності. Як це відбувається і що це означає? MySQL створює значення релевантності у вигляді числа з плаваючою точкою в залежності від того, наскільки точне знайдено збіг, після чого сортує дані в порядку убування. При бажання, дане число можна отримати:

SELECT id. MATCH (title. Content)

AGAINST ( 'Отримуємо значення релевантності')

Як бачите для пошуку використовуються дві функції MATCH і AGAINST.

MATCH - функція служить для визначення стовпчика (ів) за якими буде проведений пошук. Список стовпців в MATCH обов'язково повинен бути визначений всередині індексу FULLTEXT.

AGAINST - функція виконує безпосередній пошук.

Ви можете використовувати булевий режим, для більш тонкого пошуку. Наприклад, виконаємо пошук всіх статей, в який зустрічається слово «булевий», але відсутнє слово «режим»:

SELECT title. content FROM articles

WHERE MATCH (title. Content)

AGAINST ( '+ булевий -режим' IN BOOLEAN MODE);

Як це працює? Якщо ви не вказуєте символи «+» або «-» то MySQL шукає будь-яке слово зі списку в кожному записі (аналогія з оператором OR). Якщо ви вказується символ «+», MySQL вибере записи в яких дане слово обов'язково присутній, (як оператор AND). Якщо ви вказуєте символ «-«, MySQL вибере записи, в який цього слова немає (як оператор NOT).

Як бачите, нічого складного. Задавайте свої відповіді. Так Так. Я допускаю багато помилок, але фраза «задавайте свої відповіді» просто інтернет мем. Уже багато Пічем отримав, як я дурний і пишу такі дурниці. Сперечатися не буду, але в даному випадку це не так.

Схожі пости:

Повнотекстовий пошук для mysql за допомогою fulltext індексів
Установка apache, mysql, php, ftp на Debian GNU / Linux Дистанційна установка Debian за допомогою SSH
Повнотекстовий пошук для mysql за допомогою fulltext індексів
Правильний переклад теми WordPress за допомогою POT-файлу