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

时间:2013-09-11 11:12:15

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

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

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

    1. 使用Amazon CloudSearch和Redis
    2. 之类的混合体
    3. 成千上万的人实际上并不是那么多记录。也许在RDBMS中完成大部分工作,使用CloudSearch进行全文搜索?
    4. 使用Redis维护最近与每个用户的记录交互的集合,然后将它们联合起来以获取用户网络中的记录。
    5. 我主要担心的是从各种服务(Redis / CloudSearch)中撤回数千个ID然后必须在客户端代码中将它们联合起来的延迟。但是,也许这是没有根据的。

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

      欢迎任何建议!

1 个答案:

答案 0 :(得分:3)

我建议您使用Amazon CloudSearch:

  
      
  • 需要(多方位)搜索成千上万的记录(基于   在类别,日期,价格等领域)
  •   

CloudSearch在涉及多方面搜索时非常棒。它在亚马逊自己的网站上大量使用。它的过程非常快速。搜索索引保存在内存中,以确保以非常高的速率提供请求。

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

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

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

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

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

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

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

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

我觉得没问题。

  
    
        
  • 将部署在EC2
  •     
  

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

  
    

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

  

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

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

  
    

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

  

顺便说一下,它是Amazing Cloud Search的创建者,但我不是在为Amazon Cloud Search工作:-) 我觉得技术真的很棒(当它符合你的需要时)。

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