Как делать полнотекстовый поиск с JOIN в Rails?

Есть таблица документы. И у нее несколько связей с таблицами организации и контактные лица.

Есть поле поиска докуементов, после ввода запроса в которое должен осуществляться поиск по всем полям. Вроде бы можно просто сделать full text index и искать по нему. Но проблема в том, что нужно еще искать и по названию организации, и по ФИО контактного лица, а в таблице документов хранятся только ID этих сущностей.

Какое решение здесь можно использовать? Я так понимаю Sphinx умеет это все делать, и делать быстро. Но вопрос производительности здесь не стоит и хотелось бы решение проще, без использования внешних зависимостей.
  • Вопрос задан
  • 2614 просмотров
Пригласить эксперта
Ответы на вопрос 2
FanKiLL
@FanKiLL
Посмотрите скринкаст от codeschool. Они решили сделать поиск как на Basecamp
Сделали заготовку и поехали показывать это самому DHH (David Heinemeier Hansson) основателю рельсов и Basecamp. Он делал ревью их кода.
Там довольно примитивный код, буквально на 10-20 строчек) Но интересно.
Ответ написан
Комментировать
AMar4enko
@AMar4enko
В случае невозможности использования внешнего поискового двига это можно решить с помощью отдельных таблиц. Делаете отдельные таблицы, в которых храните только информацию для полнотекстового поиска. Пишете триггеры на вставку, обновление, удаление записей в те таблицы, по которым собираетесь делать полнотекстовый поиск - в триггере джойнами собирайте информацию, которая недоступна прямым запросом по таблице.
Также есть вариант поддержки этих таблиц не через триггеры, а через хуки ActiveRecord.
Ну и надо не забывать, что в MySQL полнотекстовый поиск только для MyISAM таблиц.

P.S. Все-таки рекомендую вам использовать Sphinx или ElasticSearch - убережете себя от большой головной боли.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы