Как я могу выбрать записи полнотекстового индекса MySQL для автоматического заполнения? - PullRequest
3 голосов
/ 06 января 2010

Есть ли способ выбрать записи из полнотекстового индекса в MySQL?

1 Ответ

2 голосов
/ 06 января 2010

Нет, не то, что я знаю. Это была бы отличная функция.

Я построил поисковый интерфейс с автозаполнением поверх 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 - единица и порядковый номер, определяющий, какой индекс вы хотите вывести .

Должен сказать, что утилита работает, но я не уверен, что она достаточно быстра, чтобы использовать ее для извлечения активного списка для автозаполнения. Конечно, у вас может быть периодическое задание, которое запускает команду и выводит ее в файл. К сожалению, это сбрасывает индексные записи не отдельные, уникальные слова.

Я догадываюсь, что вы можете использовать эту утилиту как средство для извлечения слов, но для ее преобразования в правильный список автозаполнения потребуется обработка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...