12.9 Функции полнотекстового поиска
- 12.9.1 Полнотекстовый поиск по естественному языку
- 12.9.2 Полнотекстовый поиск по булевым выражениям
- 12.9.3 Полнотекстовый поиск с расширением запроса
- 12.9.4 Стоп-слова в полнотекстовом поиске
- 12.9.5 Ограничения полнотекстового поиска
- 12.9.6 Настройка полнотекстового поиска MySQL
- 12.9.7 Добавление пользовательской сортировки для полнотекстового индексирования
- 12.9.8 ngram-парсер для полнотекстового поиска
- 12.9.9 Плагин MeCab для полнотекстового парсера
MATCH
( col1,col2,...)
AGAINST (expr
[search_modifier])
search_modifier:
{
IN NATURAL LANGUAGE MODE
| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
| IN BOOLEAN MODE
| WITH QUERY EXPANSION
}
MySQL поддерживает полнотекстовое индексирование и поиск:
Полнотекстовый индекс в MySQL — это индекс типа
FULLTEXT.Полнотекстовые индексы могут использоваться только с таблицами
InnoDBилиMyISAM, и могут создаваться только для столбцов типаCHAR,VARCHARилиTEXT.MySQL предоставляет встроенный парсер ngram для полнотекстового поиска, поддерживающий китайский, японский и корейский (CJK), и устанавливаемый плагин MeCab для японского языка. Различия в разборе описаны в разделе 12.9.8, «ngram-парсер для полнотекстового поиска» и разделе 12.9.9, «Плагин MeCab для полнотекстового парсера».
Определение индекса
FULLTEXTможет быть указано в оператореCREATE TABLEпри создании таблицы или добавлено позднее с помощью операторовALTER TABLEилиCREATE INDEX.Для больших наборов данных значительно быстрее загрузить данные в таблицу без индекса
FULLTEXT, а затем создать индекс, чем загрузить данные в таблицу с существующим индексомFULLTEXT.
Полнотекстовый поиск выполняется с помощью синтаксиса MATCH() AGAINST(). MATCH() принимает список столбцов, разделенных запятыми, которые нужно искать. AGAINST принимает строку для поиска и необязательный модификатор, указывающий тип поиска. Строка поиска должна быть строковым значением, постоянным во время оценки запроса. Это исключает, например, столбец таблицы, так как он может отличаться для каждой строки.
Существует три типа полнотекстового поиска:
-
Поиск по естественному языку интерпретирует строку поиска как фразу на естественном языке (фраза в свободном тексте). Нет специальных операторов, за исключением двойных кавычек ("). Применяется список стоп-слов. Дополнительную информацию о списках стоп-слов см. в разделе 12.9.4, «Стоп-слова в полнотекстовом поиске».
Полнотекстовый поиск — это поиск по естественному языку, если указан модификатор
IN NATURAL LANGUAGE MODEили если модификатор не указан. Дополнительную информацию см. в разделе 12.9.1, «Полнотекстовый поиск по естественному языку». Булевый поиск интерпретирует строку поиска с использованием правил специального языка запросов. Строка содержит слова для поиска. Она также может содержать операторы, определяющие требования, такие как обязательное или необязательное присутствие слова в совпадающих строках, или присвоение ему более высокого или низкого веса. Некоторые общие слова (стоп-слова) исключаются из индекса поиска и не соответствуют, если присутствуют в строке поиска. Модификатор
IN BOOLEAN MODEзадаёт булевый поиск. Дополнительную информацию см. в разделе 12.9.2, «Полнотекстовый поиск по булевым выражениям».Поиск с расширением запроса — это модификация поиска по естественному языку. Строка поиска используется для выполнения поиска по естественному языку. Затем слова из наиболее релевантных строк, возвращенных результатом поиска, добавляются к строке поиска, и поиск выполняется снова. Запрос возвращает строки из второго поиска. Модификаторы
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSIONилиWITH QUERY EXPANSIONзадают поиск с расширением запроса. Дополнительную информацию см. в разделе 12.9.3, «Полнотекстовый поиск с расширением запроса».
Информацию о производительности запросов FULLTEXT см. в разделе 8.3.4, «Индексы столбцов».
Дополнительную информацию об индексах InnoDB FULLTEXT см. в разделе 14.6.2.4, «Индексы InnoDB для полнотекстового поиска».
Ограничения полнотекстового поиска перечислены в разделе 12.9.5, «Ограничения полнотекстового поиска».
Утилита myisam_ftdump выводит содержимое полнотекстового индекса MyISAM. Это может быть полезно для отладки полнотекстовых запросов. См. раздел 4.6.2, «myisam_ftdump — отображение информации о полнотекстовом индексе».
© 2025 Oracle
Licensed under the GPLv2 License.