В MYSQL есть база со след. таблицами :
-users (id,name,email,password,status_verify).
-connections_user (user1_id,user2_id) - таблица хранения друзей.
-groups (title,description,logo) - таблица групп.
-group_user(id,user_id,group_id)
-city (id,title)
-city_user (id,city_id,user_id)
Стоит задача использовать ElasticSearch в качестве поисковика.
Надо найти пользователей у которых было найдено совпадение и отсортировать их по след. приоритетам.
1. Выводятся твои друзья ( connections_user )
2. Выводятся пользователи, состоящие с тобой в одной группе
3. Пользователи, с которыми у тебя общий город
4. Все остальные пользователи по алфавиту.
С ElastisSearch опыта нету, но сделать надо )) Прочел много статьей по этому движку, но сами понимаете, что без опыта - нормально не получится. Могли бы подсказать какой маппинг надо сделать в индексе, и какие типы надо сделать. Я подозреваю, что надо делать денормализацию. Любым идеям по реализации данной задачи буду ОЧЕНЬЬЬЬЬЬ РАД .)
Ну это именно документация. Спасибо, конечно, но я и сам ее нашел бы. Опыт есть опыт. И я задал вопрос, для того, что бы услышать советы от опытных людей, как лучше реализовать данною задачу,а не ссылку на доку.
VitaliyBorys, Ок. Какая ещё стоит задача при поиске (кроме группировки по свойствам, указанных в тексте вопроса) ?
Нужен просто поиск с нечётким совпадением по строкам или ещё что-то?
xmoonlight, На самом дела, поиск будет вестись еще по нескольким сущностям. Пользователь вводить поисковою строку, и результат выдачи буде следующий :
1. Пользователи (алгоритм сортировки я описал в вопросе).
2. Группы (будет осуществляться поиск по группам, в которых пользователь является создателям, в которых состоит, и потом по алфавиту. )
3. А так же есть сущность событие (Events) - поиск ведется названию события, и выдача будет по следующей сортировки : 1. События предстоящие в ближайшие три дня, события на которые подписались мои друзья.
Мне главное объяснить первый пункт, то есть то, что я описал в тексте вопроса. А дальше я думаю сам разберусь.
xmoonlight, Ну вот что бы достать пользователей, с которыми я состою в одной группе, в MySQL я достану след. образом : SELECT users.* FROM users
INNER JOIN group_user ON users.id = group_user.user_id
INNER JOIN groups ON groups.id = group_user.group_id
WHERE group_id IN (SELECT group_id FROM group_user WHERE user_id=AUTH_USER_UD)
xmoonlight, Про выборку да. Но про реализацию связей между типами - нет. Ведь в ES нету же внешних ключей, и связь между типа не поддерживаться как в MySQL между таблицами.