MySQL - ngram Полнотекстовый анализатор: Руководство для начинающих

Здравствуйте, будущие магистрали баз данных! Сегодня мы отправимся в захватывающее путешествие в мир ngram полнотекстового анализатора MySQL. Не волнуйтесь, если вы новичок в программировании - я буду вашим дружелюбным гидом, объясняя все шаг за шагом. Так что возьмите чашку кофе и давайте погружаться!

MySQL - ngram Fulltext Parser

ngram Полнотекстовый анализатор: Что в этом такого особенного?

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

ngram анализатор - это как суперумный библиотекарь, который разбивает текст на маленькие фрагменты (называемые ngram), и помогает вам быстро и эффективно искать в них. Особенно полезен для языков, в которых между словами нет пробелов, таких как китайский или японский.

Что такое ngram?

ngram - это непрерывная последовательность n элементов из данного текста. Например, если у нас есть слово "hello" и n = 2 (что мы называем биграммой), мы получим:

  • he
  • el
  • ll
  • lo

Довольно круто, верно? Теперь давайте посмотрим, как мы можем использовать это в MySQL!

Конфигурирование размера токена ngram

Прежде чем мы начнем использовать ngram анализатор, мы должны сказать ему, какой размер мы хотим, чтобы наши ngram были. Это называется размером токена.

Вот как мы можем это настроить:

SET GLOBAL ngram_token_size = 2;

Это устанавливает наш размер ngram в 2 (биграммы). Но помните, для изменения глобальных переменных нужны специальные привилегии. Если вы только начинаете, ваш администратор баз данных, возможно, должен сделать это для вас.

Создание FULLTEXT индекса с использованием ngram анализатора

Теперь, когда мы установили размер нашего токена, давайте создадим таблицу и добавим FULLTEXT индекс с использованием ngram анализатора:

CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
content TEXT,
FULLTEXT INDEX ngram_idx (content) WITH PARSER ngram
) ENGINE=InnoDB;

В этом примере мы создаем таблицу под названием 'articles' с колонками 'id', 'title' и 'content'. Магия происходит в последней строке, где мы создаем FULLTEXT индекс на колонке 'content' с использованием ngram анализатора.

Обработка пробелов ngram анализатором

Одна из крутых вещей в ngram анализаторе - это то, как он обрабатывает пробелы. Он относится к ним так же, как и к любому другому символу. Так, "hello world" с биграммами будет:

  • he
  • el
  • ll
  • lo
  • o
  • w
  • wo
  • or
  • rl
  • ld

Это делает его отличным для поиска фраз!

Обработка стоп-слов ngram анализатором

В отличие от некоторых других анализаторов, ngram анализатор не использует стоп-слова. Стоп-слова - это распространенные слова, такие как "the" или "and", которые часто игнорируются в поиске. ngram анализатор включает все, что может быть как хорошо, так и плохо, в зависимости от ваших потребностей.

Поиск фраз ngram анализатором

Давайте попробуем поиск фраз! Сначала давайте добавим некоторые данные в нашу таблицу:

INSERT INTO articles (title, content) VALUES
('MySQL Tutorial', 'MySQL - это популярная база данных'),
('Python Guide', 'Python - это язык программирования');

Теперь давайте поищем "popular database":

SELECT * FROM articles
WHERE MATCH(content) AGAINST('popular database' IN BOOLEAN MODE);

Это должно вернуть нашу статью MySQL Tutorial.

Поиск терминов ngram анализатором

Мы также можем искать отдельные термины. Давайте попробуем поиск "programming":

SELECT * FROM articles
WHERE MATCH(content) AGAINST('programming' IN BOOLEAN MODE);

Это должно вернуть нашу статью Python Guide.

Поиск с помощью wildcard ngram анализатором

ngram анализатор не поддерживает поиск с помощью wildcard в традиционном смысле. Однако, поскольку он разбивает слова на маленькие фрагменты, он все равно может найти частичные совпадения. Например:

SELECT * FROM articles
WHERE MATCH(content) AGAINST('prog' IN BOOLEAN MODE);

Это все равно может найти нашу статью "programming", даже если мы искали только часть слова.

Использование ngram полнотекстового анализатора в клиентской программе

Наконец, давайте посмотрим, как мы могли бы использовать ngram анализатор в программе на Python:

import mysql.connector

# Подключение к базе данных
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# Выполнение поиска
query = "SELECT * FROM articles WHERE MATCH(content) AGAINST(%s IN BOOLEAN MODE)"
search_term = 'database'

cursor.execute(query, (search_term,))

# Печать результатов
for (id, title, content) in cursor:
print(f"ID: {id}, Title: {title}, Content: {content}")

# Закрытие соединения
cursor.close()
cnx.close()

Эта программа подключается к вашей базе данных MySQL, выполняет поиск с использованием ngram анализатора и печатает результаты.

И вот у нас есть это, друзья! Мы путешествовали по земле ngram полнотекстового анализа в MySQL. Помните, практика делает совершенным, поэтому не бойтесь экспериментировать с этими концепциями. Прежде чем вы это узнаете, вы будете анализировать и искать как профессионал!

Метод Описание
SET GLOBAL ngram_token_size = n Конфигурирует размер токена ngram
CREATE TABLE... FULLTEXT INDEX... WITH PARSER ngram Создает таблицу с FULLTEXT индексом с использованием ngram анализатора
INSERT INTO... VALUES... Вставляет данные в таблицу
SELECT... WHERE MATCH(...) AGAINST(... IN BOOLEAN MODE) Выполняет полнотекстовый поиск с использованием ngram анализатора

Счастливого кодирования, и пусть ваши запросы всегда возвращают результаты, которые вы ищете!

Credits: Image by storyset