Skip to content

Commit

Permalink
skip ordering when building facets
Browse files Browse the repository at this point in the history
  • Loading branch information
axelerator committed May 8, 2017
1 parent 4928853 commit 811c5d1
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 21 deletions.
9 changes: 6 additions & 3 deletions lib/forty_facets/facet_search.rb
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,14 @@ def order
@orders.find(&:active)
end

def result
query = @filters.inject(root) do |previous, filter|
def result(skip_ordering: false)
query = @filters.reject(&:empty?).inject(root) do |previous, filter|
filter.build_scope.call(previous)
end
query = query.order(order.definition.clause) if order

unless skip_ordering
query = query.order(order.definition.clause) if order
end
query
end

Expand Down
24 changes: 7 additions & 17 deletions lib/forty_facets/filter/facet_filter_definition.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def order_facet!(facet)

class AssociationFacetFilter < FacetFilter
def selected
@selected ||= definition.association.klass.find(values)
@selected ||= definition.association.klass.find(Array.wrap(values).reject(&:blank?))
end

def remove(entity)
Expand Down Expand Up @@ -57,19 +57,14 @@ def selected
def build_scope
return Proc.new { |base| base } if empty?
Proc.new do |base|
result = base.joins(definition.joins).where(definition.qualified_column_name => value)
if definition.joins
result = result.distinct
end

result
base.joins(definition.joins).where(definition.qualified_column_name => value)
end
end

def facet
my_column = definition.qualified_column_name
query = "#{my_column} AS facet_value, count(#{my_column}) AS occurrences"
counts = without.result.reorder('').joins(definition.joins).select(query).group(my_column)
counts = without.result(skip_ordering: true).reorder('').joins(definition.joins).select(query).group(my_column)
counts.includes_values = []
facet = counts.map do |c|
is_selected = selected.include?(c.facet_value)
Expand Down Expand Up @@ -100,19 +95,14 @@ class BelongsToFilter < AssociationFacetFilter
def build_scope
return Proc.new { |base| base } if empty?
Proc.new do |base|
result = base.joins(definition.joins).where(definition.qualified_column_name => values)
if definition.joins
result = result.distinct
end

result
base.joins(definition.joins).where(definition.qualified_column_name => values)
end
end

def facet
my_column = definition.qualified_column_name
query = "#{my_column} AS foreign_id, count(#{my_column}) AS occurrences"
counts = without.result.reorder('').joins(definition.joins).select(query).group(my_column)
counts = without.result(skip_ordering: true).reorder('').joins(definition.joins).select(query).group(my_column)
counts.includes_values = []
entities_by_id = definition.association.klass.find(counts.map(&:foreign_id)).group_by(&:id)

Expand All @@ -136,7 +126,7 @@ def build_scope

matches_from_facet = base.joins(definition.joins).where("#{definition.association.klass.table_name}.#{definition.association.klass.primary_key}" => values).select(primary_key_column)

base.joins(definition.joins).where(primary_key_column => matches_from_facet).distinct
base.joins(definition.joins).where(primary_key_column => matches_from_facet)
end
end

Expand All @@ -145,7 +135,7 @@ def facet
join_name = [definition.association.name.to_s, base_table.to_s].sort.join('_')
foreign_id_col = definition.association.name.to_s.singularize + '_id'
my_column = join_name + '.' + foreign_id_col
counts = without.result
counts = without.result(skip_ordering: true)
.reorder('')
.joins(definition.joins)
.select("#{my_column} as foreign_id, count(#{my_column}) as occurrences")
Expand Down
2 changes: 1 addition & 1 deletion lib/forty_facets/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module FortyFacets
VERSION = "0.1.5"
VERSION = "0.1.6"
end

0 comments on commit 811c5d1

Please sign in to comment.