MySQL - Поиск по естественному языку с использованием全文搜索
Здравствуйте, будущие энтузиасты баз данных! Сегодня мы отправимся в увлекательное путешествие в мир поиска по естественному языку с использованием全文搜索 в MySQL. Не беспокойтесь, если вы новички в программировании; я проведу вас через эту тему шаг за шагом, как я делал это для countless студентов на протяжении многих лет моего преподавания. Так что погружаемся в!
Что такое поис по естественному языку?
Представьте, что вы ищете книгу в огромной библиотеке. Вместо того чтобы просматривать каждую книгу, не было бы замечательно, если бы вы могли просто описать, что ищете, и библиотекарь нашел бы это для вас? Именно это делает поис по естественному языку для баз данных!
Поис по естественному языку - это мощная функция в MySQL, которая позволяет вам искать записи на основе их релевантности к данному текстовому запросу. Это как если бы у вашей базы данных был超级умный библиотекарь!
Как это работает?
- MySQL создает индекс всех слов в указанных столбцах.
- Когда вы ищете, он ищет записи, содержащие эти слова.
- Затем он ранжирует результаты в зависимости от их релевантности вашему поисковому запросу.
Давайте посмотрим на это в действии с некоторыми примерами кода!
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
description TEXT,
FULLTEXT(title, description)
);
INSERT INTO books (title, description) VALUES
('The MySQL Handbook', 'A comprehensive guide to MySQL database management'),
('SQL for Beginners', 'Learn SQL from scratch with easy-to-follow examples'),
('Database Design Mastery', 'Advanced techniques for efficient database design');
SELECT * FROM books
WHERE MATCH(title, description) AGAINST('MySQL guide');
В этом примере мы:
- Создаем таблицу 'books' с FULLTEXT индексом на 'title' и 'description'.
- Вводим некоторые образцовые данные.
- Выполняем поис по естественному языку для "MySQL guide".
MySQL вернет результаты, ранжированные по релевантности, Likely с "The MySQL Handbook" вверху!
Stop Words в поиске
Теперь давайте поговорим о концепции, называемой "stop words". Представьте, если бы каждый раз, когда вы говорили, вы считали "the", "a", "an" и т.д. Это было бы утомительно, правда? MySQL чувствует то же самое!
Stop words - это.common слова, которые MySQL игнорирует во время full-text поиска, чтобы сэкономить время и улучшить релевантность. Обычно это включает:
Stop Words |
---|
a, an, and |
are, as, at |
be, but, by |
for, if, in |
into, is, it |
no, not, of |
on, or, such |
that, the, their |
then, there, these |
they, this, to |
was, will, with |
Как обращаться с Stop Words
По умолчанию MySQL использует свой собственный список stop words. Однако вы можете изменить это поведение:
- Чтобы увидеть текущий список stop words:
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD;
- Чтобы полностью отключить stop words:
SET GLOBAL innodb_ft_enable_stopword = OFF;
- Чтобы использовать пользовательский список stop words:
SET GLOBAL innodb_ft_server_stopword_table = 'database_name/table_name';
Помните, что работа с stop words может значительно повлиять на ваши результаты поиска, поэтому используйте эти параметры осмотрительно!
Поис по естественному языку с использованием клиентской программы
Теперь, когда мы понимаем основы, давайте посмотрим, как мы можем реализовать поис по естественному языку в реальном сценарии с использованием клиентской программы. Для этого примера мы будем использовать Python с библиотекой MySQL Connector.
Во-первых, убедитесь, что у вас установлен MySQL Connector:
pip install mysql-connector-python
Теперь создадим простой скрипт на Python:
import mysql.connector
# Подключение к базе данных MySQL
db = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database"
)
cursor = db.cursor()
# Функция для выполнения full-text поиска
def fulltext_search(search_term):
query = "SELECT * FROM books WHERE MATCH(title, description) AGAINST(%s IN NATURAL LANGUAGE MODE)"
cursor.execute(query, (search_term,))
results = cursor.fetchall()
return results
# Пример использования
search_results = fulltext_search("MySQL guide")
for result in search_results:
print(f"ID: {result[0]}, Title: {result[1]}, Description: {result[2]}")
# Закрытие подключения
db.close()
Давайте разберем это:
- Мы импортируем MySQL Connector и устанавливаем подключение к нашей базе данных.
- Мы определяем функцию
fulltext_search
, которая принимает поисковый запрос в качестве входных данных. - Внутри функции мы construct и выполняем запрос MySQL с использованием поиска по естественному языку.
- Мы получаем и возвращаем результаты.
- Наконец, мы демонстрируем, как использовать эту функцию и выводим результаты.
Этот скрипт позволяет вам легко выполнять поис по естественному языку из вашего приложения на Python!
Заключение
И вот мы и добрались до конца, друзья! Мы совершили путешествие через fascinat
Credits: Image by storyset