У меня есть база данных MySQL, которую я реплицирую с другого сервера. База данных содержит таблицу с этими столбцами
ID, FileName и FileSize
В таблице содержится более 4'000'000 записей. Я хочу быстро выполнить поиск в столбце FileName (varchar)
Я обнаружил, что могу использовать эту поисковую систему Sphinx. Проблема в том, что я хочу ограничить поиск по типу файлов. Должен ли я и как (триггеры?) Извлекать расширения файлов для всех строк? Может быть, мне нужно создать другую таблицу (потому что она реплицирована) и присоединиться к ней в соотношении 1:1?
Можете ли вы дать мне несколько советов:)
Вы обязательно захотите разделить тип файла на отдельный столбец - это позволит вам направить поиск Sphinx на этот термин (с режимом совпадения с расширенным):
normal query terms @filetype jpg
Однако это не точное соответствие - он все равно будет использовать разведку Sphinx вокруг совпадений слов и т.д. Это может быть то, что вы хотите, но если вы этого не сделаете, я рекомендую нормализовать ваш db и положить типы файлов в другую таблицу и иметь внешний ключ в вашей таблице файлов. Затем вы можете использовать это целое число как атрибут в настройке Sphinx и фильтровать его с использованием идентификатора определенного файла. Это будет быстрее и надежнее в Sphinx, но это немного больше.
Почему бы не использовать SQL-запрос с Regex?
Сделайте что-то вроде...
.$query.\.$extension
Это приведет к тому, что подстановочный знак будет соответствовать поисковому термину в имени файла, затем периоде, затем расширению.