Нет, не то, что я знаю. Это была бы отличная функция.
Я построил поисковый интерфейс с автозаполнением поверх MySQL. Я запускаю ежедневную работу, которая сканирует все столбцы во всех таблицах, в которых я хочу искать, извлекаю слова с помощью регулярных выражений, а затем сохраняю слова в отдельной таблице. У меня также есть таблица «многие ко многим» с одним столбцом для хранения идентификатора объекта и одним столбцом для хранения идентификатора слова, чтобы зафиксировать тот факт, что «слово является частью текста, принадлежащего объекту».
Автозаполнение работает, беря слова, введенные в поле, а затем генерируя запрос, который выглядит следующим образом:
SELECT obj.title
FROM obj_word
INNER JOIN obj
ON obj_word.obj_id = obj.id
INNER JOIN word
ON obj_word.word_id = word.id
WHERE word.word IN ('word1', 'word2', 'word3') -- generated dynamically, word1 etc are typed by the user
GROUP BY obj.id
HAVING COUNT(DISTINCT word.id) = 3 -- the 3 is generated, because user typed 3 words.
Это довольно хорошо работает для меня, но у меня нет большого количества данных для работы.
(фактическая реализация немного сложнее, потому что последнее слово соответствует LIKE, чтобы разрешить частичное совпадение)
EDIT:
Я только что узнал, что утилиту myisam_ft_dump
можно использовать для извлечения списка слов из индексного файла. Командная строка выглядит примерно так:
myisam_ftdump -d film_text 1 > D:\tmp\out.txt
Здесь -d
означает дамп (получить список всех записей), film_text
- это имя таблицы MyISAM с полнотекстовым индексом, 1
- единица и порядковый номер, определяющий, какой индекс вы хотите вывести .
Должен сказать, что утилита работает, но я не уверен, что она достаточно быстра, чтобы использовать ее для извлечения активного списка для автозаполнения. Конечно, у вас может быть периодическое задание, которое запускает команду и выводит ее в файл. К сожалению, это сбрасывает индексные записи не отдельные, уникальные слова.
Я догадываюсь, что вы можете использовать эту утилиту как средство для извлечения слов, но для ее преобразования в правильный список автозаполнения потребуется обработка.