2014-11-01 87 views
0

我有一个Ruby on Rails web应用程序,它为用户提供搜索/过滤功能。基本上我正试图编程这种应用程序。 http://demo.srchulo.com/jquery/jquery_facets/RoR - Facet Filtering方法

但是,我使用ActiveRecord(No Elasticsearch或Solr)进行搜索。现在我已经读了Elasticsearch和Solr支持方面搜索和方面过滤。因此,我想知道是否需要实现Elasticsearch或Solr以进行方面过滤,或者我可以通过简单的Javascript查询来实现吗?如果可能,我想避免使用Elasticsearch或Solr。

在此先感谢!

+0

我认为SQL能做到这一点有很多的和具有和group by,P – argentum47 2014-11-01 12:53:45

回答

0

你完全混合了这里的所有技术。

  • 的javascript/jquery的 - >客户端浏览器脚本
  • 有源记录 - >服务器端(关系)数据库(?的MySQL)ORM(对象关系映射器)
  • 的solr/elasticsearch - >服务器端全文搜索服务

和你的问题的整体回答是:它取决于!

我想你需要提供一个)方法更多的上下文信息b)弄清楚你需要什么你的需求。

0

我写了一个创建简单的基于ActiveRecord的facet搜索的gem。

如上所述,它使用group byhaving子句来收集有关构面值的信息,并提供一个简单的API来访问构面并创建缩小结果的链接。

在你看来,你可以遍历结果就像任何其他的ActiveRecord收集

%table.table.table-condensed 
    %tbody 
    - @movies.each do |movie| 
     %tr 
     %td 
      %strong=movie.title 

Use the search object to display further narrowing options to the user 

- filter = @search.filter(:genre) 
.col-md-4 
    .filter 
    .filter-title= filter.name 
    .filter-values 
     %ul.selected 
     - filter.selected.each do |genre| 
      %li= link_to genre.name, filter.remove(genre).path 
     %ul.selectable 
     - filter.facet.reject(&:selected).each do |facet_value| 
      - genre = facet_value.genre 
      %li 
      = link_to genre.name, filter.add(genre).path 
      %span.count= "(#{facet_value.count})" 

https://github.com/fortytools/forty_facets

+0

你是什么时候通常会看到四十个方面的缩放问题? – user2012677 2018-03-03 21:45:50

+0

由于实际速度取决于您的模式和数据,因此很难提出一般指标。 过滤是通过非常简单的连接和其中(...)查询完成的。 因此,您在正常控制器方法中为加速查询所做的一切适用于此处 对于每个方面,都会发生一次'GROUP-BY'查询。这些可能因成本和方面值的数量而有很大差异。 我并不认为自己是一位数据库专家,但只需掌握所有相关列的索引,对于具有高达100K行'基础'实体和4-5方面的数据集,我没有任何问题可以过滤。 – 2018-03-08 09:44:18