Есть таблица документы. И у нее несколько связей с таблицами организации и контактные лица.
Есть поле поиска докуементов, после ввода запроса в которое должен осуществляться поиск по всем полям. Вроде бы можно просто сделать full text index и искать по нему. Но проблема в том, что нужно еще искать и по названию организации, и по ФИО контактного лица, а в таблице документов хранятся только ID этих сущностей.
Какое решение здесь можно использовать? Я так понимаю Sphinx умеет это все делать, и делать быстро. Но вопрос производительности здесь не стоит и хотелось бы решение проще, без использования внешних зависимостей.
Посмотрите скринкаст от codeschool. Они решили сделать поиск как на Basecamp
Сделали заготовку и поехали показывать это самому DHH (David Heinemeier Hansson) основателю рельсов и Basecamp. Он делал ревью их кода.
Там довольно примитивный код, буквально на 10-20 строчек) Но интересно.
В случае невозможности использования внешнего поискового двига это можно решить с помощью отдельных таблиц. Делаете отдельные таблицы, в которых храните только информацию для полнотекстового поиска. Пишете триггеры на вставку, обновление, удаление записей в те таблицы, по которым собираетесь делать полнотекстовый поиск - в триггере джойнами собирайте информацию, которая недоступна прямым запросом по таблице.
Также есть вариант поддержки этих таблиц не через триггеры, а через хуки ActiveRecord.
Ну и надо не забывать, что в MySQL полнотекстовый поиск только для MyISAM таблиц.
P.S. Все-таки рекомендую вам использовать Sphinx или ElasticSearch - убережете себя от большой головной боли.