Я пытаюсь создать бизнес-поиск с помощью социальных функций с помощью ElasticSearch. У меня есть бизнес-каталог, и пользователи могут взаимодействовать с этими предприятиями по-разному: просматривая их, проверяя их и т.д.
Когда пользователь ищет бизнес, я хотел бы показать им предприятия, с которыми их друзья взаимодействовали в верхней части результатов (или фильтр на основе этих взаимодействий). Какой лучший способ настроить мой индекс для достижения этого?
Я думаю, что есть несколько возможных решений, но я начинаю с ES, и я не уверен, что вызовет проблемы:
-
Я мог бы использовать многозначность и создать отдельный индекс для каждого пользователя. Я решил это, потому что количество пользователей намного больше, чем количество предприятий или количество пользовательского контента.
-
Я мог бы добавить список пар user/score для каждого проиндексированного бизнеса. Каждый пользователь, который взаимодействовал с бизнесом, будет там, и оценка будет представлять собой количество взаимодействия, которое они имели с бизнесом (это достаточно хорошо для моих целей фильтрации/сортировки). Каждый раз, когда они взаимодействуют с бизнесом, я бы обновил счет в индексе. Проблема в том, что я забочусь только о деятельности моих друзей, поэтому мне нужно будет выяснить, каким образом учесть, кто мои друзья, создавая составную оценку для бизнеса. Я не знаю, как это сделать в ES.
-
Я мог бы создать подобную схему, но вместо того, чтобы держать оценку моих взаимодействий с бизнесом, оценка будет отражать взаимодействие моих друзей с бизнесом. Это устраняет необходимость моделирования моего социального графика в ElasticSearch, но это означает, что в любое время, когда человек взаимодействует с бизнесом, мне нужно будет обновить все оценки своих друзей. Это также означает, что список пар пользователей/пар для каждого бизнеса будет больше, так как он должен будет включать любого, у кого есть друг, который взаимодействовал с бизнесом.
-
Последнее решение, о котором я могу думать, - следить за каждым отдельным взаимодействием, которое происходит с бизнесом, и добавлять его в бизнес-документ в ES. Это не кажется мне реалистичным - оно сочетает проблемы с другими решениями. Но, вероятно, это самый простой подход в плане поддержания индекса в актуальном состоянии.
Спасибо за вашу помощь!