【问题标题】:Suggestions for a multi-faceted search software stack对多方面搜索软件堆栈的建议
【发布时间】:2013-09-15 09:13:08
【问题描述】:

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

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

我目前的想法是:

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

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

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

欢迎提出任何建议!

【问题讨论】:

    标签: search amazon-web-services full-text-search redis amazon-cloudsearch


    【解决方案1】:

    我推荐您使用 Amazon CloudSearch 来满足您的要求:

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

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

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

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

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

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

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

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

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

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

    我想这没有问题。

    • 将部署在 EC2 中

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

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

    CloudSearch 不会变慢。基于负载it might automatically:更新硬件(更大的实例),启动新实例,跨实例拆分数据。

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

    也许大部分工作都在 RDBMS 中完成,而 CloudSearch 则用于全文搜索? 可能是。但要小心,RDBMS 不像 Cloud Search 那样容易扩展。

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

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

    【讨论】:

    • 谢谢!您的回答似乎很明智,我刚刚意识到 CS 可以处理多值字段。我现在唯一担心的是,1)除了每 10 分钟更新一次 CS 中的记录外,我认为排名表达式不会允许我通过频繁更改值来进行排序。另外,2)我看不到如何在 CS 中存储“在我的社交网络中”所需的数据。不过,CS 看起来是个不错的选择,非常感谢您分享您的想法 :-)
    • @AdamCharnock 1) 您需要找到一种方法来维护 CloudSearch 数据库中的整数值。像“frequently_change”这样的东西。然后,您将能够使用自定义搜索“公式”影响结果排名。示例:订单 = 排名 * 频繁更改 2) 是的,也许你不能
    • @AdamCharnock 如果您愿意,您可以投票或/并接受答案。
    • 完成!很抱歉花时间在那里:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多