如何使用ElasticSearch来实现社交搜索?

2024-05-11

我正在尝试使用 ElasticSearch 创建具有社交功能的商业搜索。我有一个企业目录,用户可以通过不同的方式与这些企业进行交互:通过查看它们、检查它们等。

当用户搜索商家时,我希望能够在结果顶部向他们显示他们的朋友与之互动过的商家(或根据这些互动进行过滤)。设置索引以实现此目的的最佳方法是什么?

我可以想到一些可能的解决方案,但我是 ES 的初学者,我不确定什么会导致问题:

  1. 我可以使用多租户并为每个用户创建一个单独的索引。我已经排除了这种可能性,因为用户数量远远大于企业数量或用户特定内容的数量。

  2. 我可以向每个索引企业添加用户/分数对的列表。每个与企业交互的用户都会在那里,分数将代表他们与企业的交互量(这对于我的过滤/排序目的来说已经足够了)。每次他们与业务互动时,我都会更新索引中的分数。问题在于,我只关心朋友的活动,因此在为企业创建综合分数时,我需要找到某种方法来考虑我的朋友是谁。我不知道如何在 ES 中做到这一点。

  3. 我可以创建一个类似的方案,但该分数将反映我的朋友与企业的互动,而不是记录我与企业的互动。这消除了在 ElasticSearch 中对我的社交图进行建模的需要,但这确实意味着每当一个人与企业交互时,我都需要更新他们所有朋友的分数。这也意味着每个企业的用户/分数对列表将会更大,因为它需要包括任何有朋友与该企业进行过交互的人。

  4. 我能想到的最终解决方案是跟踪业务中发生的每一次交互,并将其添加到 ES 中的业务文档中。这对我来说似乎不太现实——它结合了其他解决方案的问题。但这可能是保持索引最新的最直接的方法。

感谢您的帮助!


我投票支持修改后的#2。

我不会将每个用户/分数对存储在业务文档本身中,而是创建父/子关系。这使您可以更新子项的分数(用户分数),而无需重新索引整个业务文档(以及所有其他用户分数)。

查看此页面,了解一个很棒的教程,家长/孩子大约已经完成一半了:http://www.spacevatican.org/2012/6/3/fun-with-elasticsearch-s-children-and-nested-documents/ http://www.spacevatican.org/2012/6/3/fun-with-elasticsearch-s-children-and-nested-documents/

然后你可以使用has_child 过滤器 http://www.elasticsearch.org/guide/reference/query-dsl/has-child-filter.html or top_children 查询 http://www.elasticsearch.org/guide/reference/query-dsl/top-children-query.html只查找您的朋友有分数的那些企业。关于订购儿童文档有一些注意事项,但该教程已涵盖这些内容,因此请确保您阅读到底部。

然后我只需对所有“非社交”排名搜索执行正常查询。

或者,您可以将所有内容集中在一起,并为您朋友得分的比赛添加提升,以便所有内容排名适当。执行两个查询并自己组合它们可能会更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用ElasticSearch来实现社交搜索? 的相关文章

随机推荐

  • 当我移动我的 pygame 角色时,它会留下痕迹[重复]

    这个问题在这里已经有答案了 我一直在尝试用 Python 制作一个游戏 但是当我移动我的角色时 它会留下痕迹 我知道它并没有显示出那么多 但如果你靠近的话 你可以看到这条踪迹 这真的让我很困扰 这是我的代码 import pygame im
  • jQuery异步ajax查询和返回值问题(范围、闭包)

    由于异步查询和变量范围问题 代码无法正常工作 我不明白如何解决这个问题 使用 async false 更改为 ajax 方法 不是一个选项 我知道闭包 但我如何在这里实现它 不知道 我已经在这里看到了有关 js 中的闭包和 jQuery 异
  • Win7下Jupyter Notebook中撤消文本输入

    我很惊讶我没有在 Win7 下的 Jupyter Notebook 上或在网络上找到这个问题的答案 我只是错误地覆盖了调用块的大部分 但不是全部 自动保存可以追溯到之前的一些我不想恢复的更改 Jupyter Notebook 中文本输入的撤
  • android中ScrollView中的图像

    在我的应用程序中 我想放置一个 png 文件 并且希望它在横向和纵向模式下都被视为滚动图像 请建议代码或示例 要使您的 Imageview 在高度不适合时滚动 您可以在 xml 中的 ScrollView 内添加一个 ImageView 并
  • 即使在 Excel 2007 中插入行时也保持绝对引用

    我有一个电子表格 我希望单元格公式始终查看特定单元格 即使插入行或列并且特定单元格移动也是如此 实际上 我总是想查看表格的 顶部 单元格 即使在表格顶部插入了新行 例如 单元格 A2 的公式为 E 2 现在我突出显示第 1 行并执行 插入行
  • std::make_pair 与浮点数组(float2,无符号整数)

    我有一个用 float2 unsigned int 对模板化的向量 例如 std vector
  • 当我们第一次部署 WAR 文件时,某些代码可以运行吗?

    是否有任何方法或 API 可以使用 以便每当我部署新的 WAR 文件时 部分代码都应该执行 或者当 Tomcat 启动时 相应的 servlet 应该连续启动或运行一些代码 恢复一个老问题 因为唯一的答案没有显示任何例子 为了在部署 取消部
  • 返回即将推出的 YouTube API V3 视频安排日期?

    我想要返回 YouTube 中的直播的安排日期 Example of scheduled streams YT链接 https www youtube com channel UCP7jMXSY2xbc3KCAE0MHQ A https w
  • Pandas 使用什么规则来生成视图和副本?

    我对 Pandas 在决定数据帧中的选择是原始数据帧的副本或原始数据帧的视图时使用的规则感到困惑 例如 如果我有 df pd DataFrame np random randn 8 8 columns list ABCDEFGH index
  • Inno Setup安装先决条件[重复]

    这个问题在这里已经有答案了 我正在通过 Inno Setup 创建一个安装程序 我看到很多关于如何检测先决条件是否存在的代码示例 但没有任何关于当我找不到先决条件时如何实际安装先决条件的代码示例 我确信它非常简单 但是我该如何安装先决条件呢
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 在 grpc python 中处理异步流请求

    我试图了解如何使用双向流处理 grpc api 使用 Python API 假设我有以下简单的服务器定义 syntax proto3 package simple service TestService rpc Translate stre
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • libgdx SpriteBatch 渲染到纹理

    是否可以使用 libGdx 适用于 Android 桌面的 Java 引擎 中的 SpriteBatch 渲染到纹理 如果是这样 怎么办 基本上我想将所有内容渲染到 512 x 256 纹理的 320 x 240 区域 然后缩放区域以适合屏
  • ES6 模板文字可以在运行时替换(或重用)吗?

    tl dr 是否可以制作可重用的模板文字 我一直在尝试使用模板文字 但我想我就是不明白 现在我感到沮丧 我的意思是 我想我明白了 但 它 不应该是它的运作方式 或者它应该如何实现 它应该变得不同 我看到的所有示例 甚至标记模板 都要求 替换
  • asp.net core http 如果没有内容类型标头,则删除 `FromBody` 忽略

    我在 http 中使用 bodyDELETE要求 我知道目前删除主体是非标准的 但是允许的 使用时出现问题HttpClient它不允许删除请求的正文 我知道我可以使用SendAsync 但我宁愿让我的 API 更加灵活 我希望这个机构是可选
  • 如何在 Objective-C 标头中引用 Swift 枚举

    有没有办法从 Objective C 标头引用 Swift 枚举 如果你想在 Objective C 头中查看 Swift 类 你可以使用 objc class Foo 我没有看到枚举有任何类似的东西 你想做的事情叫做forward dec
  • CPU寄存器和多任务处理

    我目前正在学习汇编 我很困惑 CPU 寄存器如何与多任务一起工作 所以在多任务系统中 CPU可以随时暂停某个程序的执行并运行另一个程序 那么在这一步中寄存器值是如何保存的呢 寄存器是压入堆栈还是以其他方式 CPU 寄存器如何与多任务一起工作
  • 如何使用ElasticSearch来实现社交搜索?

    我正在尝试使用 ElasticSearch 创建具有社交功能的商业搜索 我有一个企业目录 用户可以通过不同的方式与这些企业进行交互 通过查看它们 检查它们等 当用户搜索商家时 我希望能够在结果顶部向他们显示他们的朋友与之互动过的商家 或根据