Поиск будущего FULLTEXT поиск - PullRequest
3 голосов
/ 19 июля 2010

У меня есть индекс FULLTEXT с именем cart_product_fti для таблицы

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

MATCH (foo,bar,etc)

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

Поэтому мне интересно, есть ли способ получить список всех полей в индексе, а затем вставить этот список в мой MATCH(), чтобы его не пришлось обновлять, если в FULLTEXT внесено изменение индекс

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Чтобы получить список всех полей в индексе, вы можете использовать команду SQL SHOW INDEXES FROM <table>.

. В ней будет показан каждый индекс в таблице, а для индексов с несколькими столбцами у вас будет одна записькаждый столбец.Вам следует использовать это решение только с надлежащим кэшированием списка столбцов для индекса.

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

1 голос
/ 19 июля 2010

Возможные решения:

  • Просто сделай работу. Правильно структурированный проект, вероятно, имеет всего 1 или 2 класса или файлы с определенным запросом / датарированием, поэтому не должно быть так много работы.

  • Продолжайте снова и снова запрашивать information_schema.statistics для каждого запроса, чтобы динамически (вряд ли эффективно) построить запрос.

  • Определите хранимую процедуру, которая выполняет поиск в таблице, и в этом случае для изменения макета таблицы / полнотекстового индекса потребуется только один раз изменить процедуру.

Редактировать: по какой-то причине key_column_usage, похоже, не содержит ссылку FULLTEXT, и мы должны прибегнуть к таблице information_schema.statistics?

...