Полнотекстный поиск Yii для CRM. Как реализовать?

Нужно реализовать полнотекстный поиск по CRM. Какие есть идеи, как лучше реализовать подобное на Yii 1.14 + php + mySQL? Sphinx не подходит, т.к. его нужно предустанавливать на хостинг, а хотелось бы решение для системы "из коробки". Написать скрипт, который это сделает сам (установит сфинкса или подобное ПО) - не всегда возможно, т.к. не всегда хостинг позволит, а продукт рассчитан на любой хостинг, не только ВПС. Суть задачи:

Глобальный поиск должен обеспечить нахождение существенных объектов в системе,их представление и операции над ними если они удовлетворяют условиям поиска.

1. Простой поиск. При вводе слова или нескольких слов в поле поиска система должна найти все объекты в которых встречаются данные слова. При этом, надо показывать «существенные» объекты. Напимер, если пользователь ввел слово «Washington» и это слово было найдено в адресе пользователя, то надо показывать не адрес пользователя, а разумеется, самого пользователя и указывать, что искомое слово было найдено в адресе.

Поиск должен показывать результат примерно так:
John Smith, 101 Main St, Washington DC.
Результаты поиска надо представлять постранично, с чекбоксом для каждого результата. Чекбоксы нужны для того, чтобы пользователь мог пометить интересующие его результаты.

2. Расширеный поиск. После того как пользователь попал на страничку с результатами поиска он может провести повторный поиск используя расширенные функции.
В заголовке страницы должно быть:
a) Поле поиска в котором указаны поисковые слова (то что пользователь ввел в простом поиске)
b) Радио кнопки: Exact phrase, All words, Any word
c) Чекбоксы с указанием модулей
  • Вопрос задан
  • 745 просмотров
Пригласить эксперта
Ответы на вопрос 1
kompi
@kompi
nullstack devoops
FTS на mysql по определению очень медленный, а уж для CRM, которой явно не один человек будет пользоваться, да ещё плюс объём информации будет постоянно разрастаться - такие запросы будут ввергать в перманентные отвалы скриптов из-за ожидания окончания обработки mysql.
Т.е. пытаясь обойтись не специализированным решением сейчас, вас ожидает большой геморрой в будущем.

Мои мысли по реализации:
Опишите бизнес логику fts в интерфейсах/абстрактных классах. Одну реализацию сделайте с помощью нативных средств mysql, другую - с помощью sphinx.
Протестируйте первый вариант с демо данными приближёнными в объёмах к реальным. Т.е. найдите примерный объём, после которого начинается деградация в производительности. А потом добавьте в описание сrm примечание, что при достижении определённого количества данных/записей, рекомендуется подключить sphinx, иначе в работе с mysql будет значительная деградация производительности.
Во-первых, клиент будет предупреждён, во-вторых будет сразу готова более или менее безболезненная реализация перехода fts от mysql к shpinx.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы