MySQL - Поиск по естественному языку с использованием全文搜索

Здравствуйте, будущие энтузиасты баз данных! Сегодня мы отправимся в увлекательное путешествие в мир поиска по естественному языку с использованием全文搜索 в MySQL. Не беспокойтесь, если вы новички в программировании; я проведу вас через эту тему шаг за шагом, как я делал это для countless студентов на протяжении многих лет моего преподавания. Так что погружаемся в!

MySQL - Natural Language Fulltext Search

Что такое поис по естественному языку?

Представьте, что вы ищете книгу в огромной библиотеке. Вместо того чтобы просматривать каждую книгу, не было бы замечательно, если бы вы могли просто описать, что ищете, и библиотекарь нашел бы это для вас? Именно это делает поис по естественному языку для баз данных!

Поис по естественному языку - это мощная функция в MySQL, которая позволяет вам искать записи на основе их релевантности к данному текстовому запросу. Это как если бы у вашей базы данных был超级умный библиотекарь!

Как это работает?

  1. MySQL создает индекс всех слов в указанных столбцах.
  2. Когда вы ищете, он ищет записи, содержащие эти слова.
  3. Затем он ранжирует результаты в зависимости от их релевантности вашему поисковому запросу.

Давайте посмотрим на это в действии с некоторыми примерами кода!

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');

В этом примере мы:

  1. Создаем таблицу 'books' с FULLTEXT индексом на 'title' и 'description'.
  2. Вводим некоторые образцовые данные.
  3. Выполняем поис по естественному языку для "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. Однако вы можете изменить это поведение:

  1. Чтобы увидеть текущий список stop words:
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD;
  1. Чтобы полностью отключить stop words:
SET GLOBAL innodb_ft_enable_stopword = OFF;
  1. Чтобы использовать пользовательский список 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()

Давайте разберем это:

  1. Мы импортируем MySQL Connector и устанавливаем подключение к нашей базе данных.
  2. Мы определяем функцию fulltext_search, которая принимает поисковый запрос в качестве входных данных.
  3. Внутри функции мы construct и выполняем запрос MySQL с использованием поиска по естественному языку.
  4. Мы получаем и возвращаем результаты.
  5. Наконец, мы демонстрируем, как использовать эту функцию и выводим результаты.

Этот скрипт позволяет вам легко выполнять поис по естественному языку из вашего приложения на Python!

Заключение

И вот мы и добрались до конца, друзья! Мы совершили путешествие через fascinat

Credits: Image by storyset