ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Полнотекстовый поиск в MySQL

Как установить MySQL на Ubuntu 16.04

MySQL использует общий индекс для столбцов таблицы, чтобы ускорить поиск, и этот тип поиска называется индексом BTREE. Другим типом индекса является индекс FULLTEXT, который отличается от индекса BTREE. Полнотекстовый индекс используется для поиска определенного ключевого слова в тексте, а не определенного значения в проиндексированных столбцах. Индекс BTREE и индекс FULLTEXT могут применяться к одному и тому же столбцу таблицы.

 

Возможности индекса FULLTEXT

  1. Его можно применять к полям CHAR, VARCHAR и таблицы TEXT.
  2. Он поддерживает механизмы хранения InnoDB и MyISAM.
  3. Используется только с предложениями MATCH() и AGAINST().

 

Типы режимов полнотекстового поиска

С помощью индекса FULLTEXT можно выполнять три типа поиска, которые поясняются ниже:

1. Логический режим

Этот тип поиска используется для запросов, содержащих логические операторы, такие как оператор меньше (‘<‘) и больше чем (‘>’), знак плюс (‘+’), знак минус (‘- ‘), двойные кавычки (“”), подстановочный знак (‘*) и т. д.

2. Режим естественного языка

Тип поиска по умолчанию интерпретирует строку поиска как литеральную фазу.

3. Режим расширения запроса

В этом типе поиска поиск выполняется два раза. Второй поиск применяется к результату первого поиска, чтобы найти наиболее релевантные результаты поиска.

 

Предпосылки

Создайте таблицу с данными в базе данных MySQL, чтобы проверить использование полнотекстового поиска в MySQL. Откройте терминал и подключитесь к серверу MySQL, выполнив следующую команду:

$ sudo mysql -u root

 

Выполните следующую команду, чтобы создать базу данных с именем test_db :

CREATE DATABASE test_db;

 

Выполните следующую команду, чтобы выбрать базу данных:

USE test_db;

 

Выполните следующий запрос, чтобы создать таблицу с именем customers и пятью полями:

CREATE TABLE customers(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50),
address TEXT,
contact_no VARCHAR(15));

 

Выполните следующий запрос INSERT, чтобы вставить четыре записи в таблицу клиентов .

INSERT INTO `customers` (`id`, `name`, `email`, `address`, `contact_no`) VALUES
('4001', 'AndreyEx Terminator', 'AndreyEx@gmail.com', 'Krasnay, Krasnodar', '00000'),
('4002', 'Anna Pupkina', 'AnnaPup@gmail.com', 'Krasnay, Moscow', '11111'),
('4003', 'Maxs Terminator', 'Maxs@gmail.com', 'Lenina, Piter', '22222'),

 

Выполните следующую команду, чтобы добавить индекс FULLTEXT для поля адреса таблицы клиентов.

Alter table customers ADD FULLTEXT (address);

 

Выполните следующую команду, чтобы проверить список определенных индексов таблицы клиентов :

SHOW INDEX FROM customers;

 

Следующие выходные данные показывают, что для таблицы клиентов существует два индекса. Один из них — это индекс BTREE, который был определен по умолчанию для основного поля, а другой — индекс FULLTEXT, который был определен позже для поля адреса.

 

Использование полнотекстового поиска

В этом руководстве показан поиск в таблице с использованием различных режимов FULLTEXT-индекса.

 

ПОЛНОТЕКСТОВЫЙ поиск в логическом режиме

Следующий запрос SELECT будет искать слово «Moscow» в поле адреса таблицы клиентов в логическом режиме. Таблица клиентов содержит только одну запись, соответствующую этому критерию:

SELECT * FROM customers WHERE MATCH(address) AGAINST('Moscow' IN BOOLEAN MODE);

 

После выполнения предыдущего запроса появится следующий вывод.

Выполните следующий запрос SELECT для поиска обоих слов, “Moscow” и “Krasnay” в поле адреса таблицы клиентов с использованием индекса FULLTEXT в логическом режиме. В таблице клиентов есть две строки, содержащие оба слова: «Moscow» и «Krasnay» :

SELECT * FROM customers
WHERE MATCH(address) AGAINST('Moscow + Krasnay' IN BOOLEAN MODE);

 

После выполнения предыдущего запроса появится следующий вывод. Вывод показывает, что поле адреса содержит «Moscow» и «Krasnay».

Выполните следующий запрос SELECT для поиска тех строк таблицы клиентов, которые содержат слово “Moscow”, но не содержат слова “Krasnay” в поле адреса таблицы клиентов , используя полнотекстовый индекс в логическом режиме. В таблице клиентов существуют две строки , соответствующие критериям:

SELECT * FROM customers WHERE MATCH(address) AGAINST('Moscow -Krasnay' IN BOOLEAN MODE);

 

После выполнения предыдущего запроса появится следующий вывод. Вывод показывает, что поле адреса содержит «Moscow», но не «Krasnay».

 

ПОЛНОТЕКСТОВЫЙ поиск в режиме естественного языка

Выполните следующую команду, чтобы добавить индекс FULLTEXT для поля имени таблицы клиентов :

Alter table customers ADD FULLTEXT (name);

 

Следующий запрос SELECT будет искать слово «Terminator» в поле имени таблицы клиентов в режиме естественного языка. Таблица клиентов содержит две записи, соответствующие этому критерию:

SELECT * FROM customers
WHERE MATCH(name) AGAINST('Terminator' IN NATURAL LANGUAGE MODE);

 

После выполнения предыдущего запроса появится следующий вывод. Строки, содержащие значение ‘Terminator’ в поле имени, были показаны в выходных данных.

 

ПОЛНОТЕКСТОВЫЙ поиск в режиме расширения запроса

Следующий запрос SELECT будет искать слово «AndreyEx» в поле имени таблицы клиентов в режиме расширения запроса. Таблица клиентов содержит две записи, соответствующие этому критерию:

SELECT * FROM customers
WHERE MATCH(name) AGAINST("AndreyEx" WITH QUERY EXPANSION);

 

После выполнения предыдущего запроса появится следующий вывод. В выходных данных поле имени первой строки содержит слово «AndreyEx» с другим словом «Terminator», а поле имени второй строки содержит соответствующее слово «Terminator».

 

Удалить индекс FULLTEXT

Выполните следующую команду, чтобы удалить FULLTEXT индекс поля имени:

ALTER TABLE customers DROP INDEX  name;

 

Выполните следующую команду, чтобы проверить текущий список индексов таблицы клиентов после удаления индекса FULLTEXT из поля имени:

SHOW INDEX FROM customers;

 

После выполнения предыдущего запроса появится следующий вывод. Вывод показывает, что таблица клиентов содержит один индекс BTREE для поля id и один FULLTEXT для поля адреса.

 

Вывод

Различные способы поиска содержимого в таблице с использованием индекса FULLTEXT были показаны в этом руководстве, чтобы помочь новым пользователям MySQL изучить использование поиска FULLTEXT в MySQL. Кроме того, обсуждались полные возможности индекса FULLTEXT. Мы надеемся, что вы нашли эту статью полезной.

Exit mobile version