Нет необходимости индексировать отдельно от развертывания. Здесь я предлагаю решение.
Создайте каталог по умолчанию в вашем приложении, скажем searchdata. Внутри этого создайте отдельные пути к различным типам данных (скажем, для городов, папка с именем city_index).
Внутри файла конфигурации (вашего приложения) укажите эти пути.
Напишите сценарии php, чтобы он считывал данные таблицы и составлял индекс. Эти сценарии используют пути конфигурации для создания индекса.
Напишите мастер-скрипт, который запустит все эти скрипты.
На вашем сервере запустите эти скрипты один раз. Этот поиск будет продолжен (используйте пути конфигурации для поиска). (Нет индексации при первом поиске)
Если был добавлен новый город, то в вашем коде, в который вы добавляете этот город (функция модели) с обновлением db, обновите и индекс. Также оптимизируйте индексный файл, который уменьшит время поиска. Эта операция не частая, поэтому обновление на лету не проблема.