2

作为客户新项目的一部分,我需要创建一个搜索工具。记录将是在一个或多个特定日期发生的事情。很高兴获得 SO 关于哪些工具最适合以下要求的建议:

  1. 需要(多方面)搜索数万条记录(基于类别、日期、价格等字段)
  2. 需要搜索多值字段(即标签)
  3. 需要能够通过静态因素(如价格、距离等)订购
  4. 需要能够通过动态/频繁变化的因素(例如用户参与度/流量等)进行排序
  5. 需要能够只返回在用户自己的社交网络中有活动的记录(即“只显示我的朋友参与的结果”)。
  6. 将部署在 EC2 中

我目前的想法是:

  1. 混合使用 Amazon CloudSearch 和 Redis
  2. 成千上万的记录实际上并没有那么多。也许在 RDBMS 中完成大部分工作,使用 CloudSearch 进行全文搜索?
  3. 使用 Redis 为每个用户维护一组最近交互的记录,然后将它们合并以获取用户网络中的记录。

我主要担心的是从各种服务(Redis/CloudSearch)中提取可能数千个 ID,然后必须将它们合并到客户端代码中的延迟。然而,这或许是没有根据的。

我希望可能有一个我错过的技术堆栈可以为我解决很多问题。我不想去重新发明轮子。

欢迎任何建议!

4

1 回答 1

3

我向您推荐 Amazon CloudSearch 以满足您的要求:

  • 需要(多方面)搜索数万条记录(基于类别、日期、价格等字段)

CloudSearch 在多方面搜索方面真的很棒。它在亚马逊自己的网站上广泛使用。而且它的过程非常快。搜索索引保存在内存中,以确保可以以非常高的速率处理请求。

  • 需要搜索多值字段(即标签)

没问题(对于任何搜索引擎)

  • 需要能够通过静态因素(如价格、距离等)订购

没问题(对于任何搜索引擎)

  • 需要能够通过动态/频繁变化的因素(例如用户参与度/流量等)进行排序

您可以在 CloudSearch 中设置“公式”。它会使您的请求排名更高或更低。它通常用于: - 通过根据发布日期提高结果排名来提供“新鲜”内容。- 提升受欢迎的结果

CloudSearch 非常擅长这项任务。所以它看起来很适合你。

  • 需要能够只返回在用户自己的社交网络中有活动的记录(即“只显示我的朋友参与的结果”)。

我想这没有问题。

  • 将部署在 EC2 中

CloudSearch 的胜利。您请求将留在亚马逊网络中。让您请求比通过互联网快得多。

我主要担心的是从各种服务(Redis/CloudSearch)中撤回可能数千个 ID 的延迟

CloudSearch 不会变慢。根据负载,它可能会自动:更新硬件(更大的实例),启动新实例,跨实例拆分数据。

也许您可以从 Amazon 而不是 Redis 切换到 SimpleDB?它将允许您轻松扩展。但是在使用 Amazon Cloud Search(或任何搜索引擎数据库)时使用其他数据库并不少见。

也许在 RDBMS 中完成大部分工作,使用 CloudSearch 进行全文搜索?也许。但要小心,RDBMS 不像 Cloud Search 那样容易扩展。

顺便说一句,它是Amazing Cloud Search的创建者,但我不为 Amazon Cloud Search 工作 :-) 我只是觉得这项技术真的很棒(当它满足您的需要时)。

希望它有所帮助。并希望它不会太乱。

于 2013-09-12T07:32:58.530 回答