Как можно использовать ElasticSearch для реализации социального поиска?

Я пытаюсь создать бизнес-поиск с социальными функциями с помощью ElasticSearch. У меня есть бизнес-справочник, и пользователи могут взаимодействовать с этими компаниями по-разному: просматривая их, проверяя их и т. д.

Когда пользователь ищет компанию, я хотел бы иметь возможность показывать ему компании. с которыми взаимодействовали их друзья, в верхней части результатов (или фильтровать на основе этих взаимодействий). Как лучше всего настроить мой индекс для достижения этой цели?

У меня есть несколько возможных решений, но я новичок в ES и не уверен, что вызовет проблемы:

  1. Я мог бы использовать мультитенантность и создать отдельный индекс для каждого пользователя. Я исключил это, потому что количество пользователей намного больше, чем количество предприятий или количество пользовательского контента.

  2. Я мог бы добавить список пар «пользователь/оценка» для каждой проиндексированной компании. Каждый пользователь, который взаимодействовал с бизнесом, будет там, и оценка будет представлять количество взаимодействий, которые они имели с бизнесом (этого достаточно для моих целей фильтрации/сортировки). Каждый раз, когда они взаимодействовали с бизнесом, я обновлял оценку в индексе.Проблема в том, что меня волнует только активность моих друзей, поэтому мне нужно найти способ учитывать, кто мои друзья, при создании сводной оценки для бизнеса. Я не знаю, как это сделать в ES.

  3. Я мог бы создать аналогичную схему, но вместо того, чтобы вести учет моих взаимодействий с бизнесом, баллы отражали бы взаимодействие моих друзей с бизнесом. Это избавляет от необходимости моделировать мой социальный граф в ElasticSearch, но это означает, что каждый раз, когда человек взаимодействует с бизнесом, мне нужно будет обновлять оценки всех его друзей. Это также будет означать, что список пар «пользователь/оценка» для каждого бизнеса будет больше, поскольку он должен включать всех, у кого есть друг, который взаимодействовал с бизнесом.

  4. Окончательное решение, которое я могу придумать, — это отслеживать каждое отдельное взаимодействие, которое происходит с бизнесом, и добавлять его в бизнес-документ в ES. Мне это не кажется реалистичным — оно сочетает в себе проблемы из других решений. Но это, вероятно, самый простой подход с точки зрения поддержания индекса в актуальном состоянии.

Спасибо за помощь!

20
задан Borys 21 May 2012 в 16:28
поделиться