Fullstack Coding
200 subscribers
41 photos
13 links
Коротко и ёмко про Web разработку)
Сотрудничество: @PashNorthMan
Download Telegram
Индекс FullText в MySQL используется для полнотекстового поиска в текстовых данных. Он позволяет выполнять поиск по словам и фразам в текстовых полях, таких как CHAR, VARCHAR и TEXT.

🖊️Основные моменты:

1. Создание индекса:
Чтобы создать полнотекстовый индекс, можно использовать следующий синтаксис:

      CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
body TEXT,
FULLTEXT(title, body)
);


Либо добавить индекс к существующей таблице:

      ALTER TABLE articles ADD FULLTEXT(title, body);


2. Поиск с использованием MATCH() и AGAINST():
Для выполнения полнотекстового поиска используется оператор MATCH() в сочетании с AGAINST(). Например:

      SELECT * FROM articles
WHERE MATCH(title, body) AGAINST('поиск' IN NATURAL LANGUAGE MODE);


3. Режимы поиска:
MySQL поддерживает несколько режимов поиска:
📍NATURAL LANGUAGE MODE: Поиск по естественному языку.
📍BOOLEAN MODE: Позволяет использовать операторы (например, +, -, *) для более точного управления поиском.
📍WITH QUERY EXPANSION: Расширяет запрос, добавляя синонимы и связанные термины.

4. Ограничения:
📍Полнотекстовые индексы могут быть созданы только для таблиц с типом хранения MyISAM или InnoDB (начиная с MySQL 5.6).
📍По умолчанию, MySQL игнорирует слова, состоящие менее чем из 4 символов (это значение можно изменить в конфигурации).
📍Стоп-слова (например, "и", "в", "на") также игнорируются.

5. Оптимизация:
Для улучшения производительности полнотекстового поиска можно использовать различные настройки конфигурации MySQL, такие как ft_min_word_len и ft_max_word_len, а также управлять стоп-словами.

🍕Пример использования:

CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
body TEXT,
FULLTEXT(title, body)
);

INSERT INTO articles (title, body) VALUES
('Первый заголовок', 'Это текст первого статьи.'),
('Второй заголовок', 'Это текст второй статьи.'),
('Третий заголовок', 'Это текст третьей статьи.');

SELECT * FROM articles
WHERE MATCH(title, body) AGAINST('текст' IN NATURAL LANGUAGE MODE);


Этот запрос вернет все статьи, содержащие слово "текст" в заголовке или теле статьи.

#mysql