【发布时间】:2016-12-11 18:12:15
【问题描述】:
我正在尝试使用 ElasticSearch 创建具有社交功能的业务搜索。我有一个企业目录,用户可以通过不同的方式与这些企业进行交互:查看它们、检查它们等等。
当用户搜索商家时,我希望能够在结果顶部显示他们的朋友与之互动过的商家(或根据这些互动进行过滤)。 设置索引以实现此目的的最佳方法是什么?
我认为有几个可能的解决方案,但我是 ES 的初学者,我不确定会导致什么问题:
我可以使用多租户并为每个用户创建一个单独的索引。我已经排除了这一点,因为用户数量远大于企业数量或用户特定内容的数量。
我可以将用户/分数对的列表添加到每个索引业务。每个与业务进行过交互的用户都将在其中,分数将代表他们与业务的交互量(这对于我的过滤/排序目的来说已经足够了)。每次他们与业务互动时,我都会更新索引中的分数。这样做的问题是我只关心我朋友的活动,所以我需要想办法在为企业创建综合分数时考虑我的朋友是谁。我不知道如何在 ES 中做到这一点。
我可以创建一个类似的方案,但不是记录我与企业互动的分数,而是反映我朋友与企业互动的分数。这消除了在 ElasticSearch 中为我的社交图建模的需要,但这确实意味着每当一个人与企业交互时,我都需要更新他们所有朋友的分数。这也意味着每个企业的用户/分数对列表会更大,因为它需要包括任何有朋友与企业互动过的人。
我能想到的最终解决方案是跟踪业务中发生的每个单独的交互,并将其添加到 ES 中的业务文档中。这对我来说似乎不太现实——它结合了其他解决方案的问题。但就使索引保持最新而言,这可能是最直接的方法。
感谢您的帮助!
【问题讨论】:
-
我遇到了类似的问题 - 请分享一下您最终是如何解决的?
标签: elasticsearch