Возникла необходимость реализовать подобие CRM системы, в ней должны храниться задачи и данные о абонентах.
Предполагал хранить все данные в postgresql, но как быть с поиском?
Хотелось бы реализовать хороший и качественный поиск, например что бы при вводе поискового запроса, поиск осуществлялся по разным сущностям (задачи и абонент), и по разных их полям (адрес, ФИО, и прочие поля абонента), а так же в задачах (комментарии задачи, описание задачи, и прочее) а так же в других возможных сущностях.
Слышал про elasticsearch, sphinx, apache lucene и прочие движки полнотекстового поиска, но не понимаю как начать их использовать. Нужно ли мне отказываться от postgresql? Или при добавлении данных отправлять в 2 БД приемника? Или репликация postgresql? Или как это реализуется?
Сам бекенд планировал сделать на NestJS (node.js)
Полнотекстовый поиск хорош для поиска по полям описания, скажем некоторого продукта. Для остальных полей разве нужно неточное совпадение? По "Иванов" нужно найти "Иванова"?
Стоит для начала исследовать возможности поиска postgresql.
Капитан Пронин, У абонента будет множество полей: номер телефона, лицевой счёт, Инн, адрес проживания, адрес регистрации, Эл. Почта и прочие данные.
Так же там будут храниться задачи для операторов, типа джиры, там будет: описание задачи (детали), комментарии, исполнитель и прочие детали задачи.
Хотелось бы чтобы операторы не задумывались о деталях поиска а просто вводили слово, а поиск искал по разным сущностям (задача и абонент) и по разным полям.
Например слово может быть найдено в комментарии задачи, в описании задачи, адрес абонента, его ФИО, лицевой счёт, номер телефона и прочее..
Описывать такой запрос ilike в sql, думаю будет много OR для всех видов полей и разных таблиц, учитывая что данных будет много, в общем вы понимаете что это не вариант
в sql, думаю будет много OR для всех видов полей и разных таблиц
В ElasticSearch тоже будет много фильтров для поиска согласно кол-ву сущностей поиска. Это же вопрос к хранению данных. Ведь можно хранить и в одном JSON поле и искать по заданным полям вместо JOIN множества полей разных таблиц.