Какие существуют варианты создания масштабируемого полнотекстового поиска с результатами, которые необходимо сортировать для каждого пользователя? Это для PHP / MySQL (также Symfony / Doctrine, если применимо).
В нашем случае у нас есть база данных о тренировках, выполненных пользователями. Тренировки, которые пользователь выполнял ранее, должны отображаться в верхней части результатов. Чем чаще они выполняют тренировку, тем выше она должна появляться в результатах поиска. Если это поможет, вы можете предположить, что мы знаем, сколько раз пользователь выполнял тренировку заранее.
Возможные решения
Sphinx - Используйте Sphinx для реализации полнотекстового поиска, выполняйте все запросы и сортировку в MySQL. Это кажется многообещающим (и есть плагин Symfony!), Но я не знаю много об этом.
Lucene - Используйте Lucene для выполнения полнотекстового поиска и добавления пользовательских запросов в запрос. Как предлагается в этот поток переполнения стека . Либо используйте Lucene для получения результатов, а затем измените их порядок в PHP. Однако оба решения кажутся неуклюжими и потенциально не масштабируемыми, поскольку пользователь, возможно, выполнил сотни тренировок.
Mysql - Нет встроенной поддержки полного текста (InnoDB), поэтому нам пришлось бы использовать LIKE или REGEX, которые не масштабируются.