【问题标题】:Rails: Implement Search/Filter like Amazon.comRails:像 Amazon.com 一样实现搜索/过滤器
【发布时间】:2014-06-04 20:11:35
【问题描述】:

我正在尝试在基于多个属性的模型上实现搜索功能。我想让用户能够指定要过滤的属性。它与任何电子商务网站(例如 Amazon.com)非常相似

例如,用户可以根据 - 作者 - 评分 - 类别

任何建议将不胜感激!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:
    【解决方案2】:

    我之前已经实现了搜索,我很幸运

    http://railscasts.com/episodes/111-advanced-search-form-revised

    这具有保存搜索的优势,在它自己的模型中不会弄脏其他模型,并且无需任何宝石即可轻松实现。

    【讨论】:

      【解决方案3】:

      我强烈建议使用 Solr 为您处理分面,因此请考虑使用 Sunspot 作为 Solr 上的 Ruby/Rails 抽象。

      从文档中可以看出,您可以通过这种方式定义字段分面:

      # Posts that match 'pizza' returning counts for each :author_id
      search = Post.search do
        fulltext "pizza"
        facet :author_id
      end
      
      search.facet(:author_id).rows.each do |facet|
        puts "Author #{facet.value} has #{facet.count} pizza posts!"
      end
      

      Sunspot 与 Rails 的集成还通过在 save 回调中自动索引对象,使维护 Solr 索引变得更加容易。

      【讨论】:

        【解决方案4】:

        我也遇到过类似的问题,但我不想使用像 Solr 或 ElasticSearch 这样的外部服务,所以我构建了这个 gem:https://github.com/fortytools/forty_facets

        【讨论】:

        • 没有 Solr 或 ElasticSearch 对性能的影响有多大?您何时会看到扩展问题?
        • 很难提出通用指标,因为实际速度取决于您的架构和数据。过滤是通过非常直接的连接和 where(...) 查询完成的。因此,您在普通控制器方法中为加速查询所做的一切都适用于此处。对于每个 Facet,都会发生一个“GROUP-BY”查询。根据构面的数量和构面值,这些成本可能会有很大差异。我不认为自己是数据库专家,但只需在所有相关列上添加索引,我就可以过滤具有多达 100K 行“基本”实体和 4-5 个方面的数据集。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多