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