对多方面搜索软件堆栈的建议



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

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

我目前的想法是:

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

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

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

欢迎任何建议!

我建议您使用 Amazon CloudSearch 以满足您的要求:

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

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

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

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

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

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

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

您可以在云搜索中设置"公式"。它将使您的请求排名更高或更低。它通常用于:- 通过根据发布日期提高结果耙来提供"新鲜"内容。- 提升流行结果

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

  • 需要能够仅返回已存在的记录 用户自己的社交网络中的活动(即"仅向我显示结果" 我的朋友已经订婚了')。

我想这没有问题。

  • 将部署在 EC2 中

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

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

云搜索不会减慢速度。根据负载,它可能会自动:更新硬件(更大的实例),启动新实例,在实例之间拆分数据。

也许您可以从亚马逊而不是Redis切换到SimpleDB?它将使您能够轻松扩展。但是,在使用Amazon Cloud Search(或任何搜索引擎数据库)时,使用其他数据库的情况并不罕见。

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

顺便说一句,它是惊人的云搜索的创建者,但我不是为亚马逊云搜索工作:-)我只是觉得这项技术真的很棒(当它符合你的需要时)。

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

最新更新