Class: OssActiveRecord::SearchRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/oss_active_record/search_request.rb

Instance Method Summary collapse

Constructor Details

#initialize(index_instance) ⇒ SearchRequest

Returns a new instance of SearchRequest.



3
4
5
6
7
8
# File 'lib/oss_active_record/search_request.rb', line 3

def initialize(index_instance)
  @params = {'start' => 0,  'rows' => 10}
  @filters = []
  @index_instance = index_instance
  @order_by = {}
end

Instance Method Details

#execute(&block) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/oss_active_record/search_request.rb', line 44

def execute(&block)
  self.instance_eval(&block) unless block.nil?
  @params['filters'] = @filters unless @filters.length == 0
  fields = []
  @index_instance.text_fields.each do |key, value|
    fields<<{ "field"=> value,"phrase"=> true,"boost"=> 1.0}
  end
  @params['searchFields'] = fields unless fields.length == 0
  sorts = []
  @order_by.each do |key, value|
    sorts<<{ "field"=> key,"direction"=> value}
  end
  @params['sorts'] = sorts unless sorts.length == 0
  return @index_instance.oss_index.search_field(@params)
end

#filter(field, value, negative) ⇒ Object



14
15
16
# File 'lib/oss_active_record/search_request.rb', line 14

def filter(field, value, negative)
  @filters << {"type"=> "QueryFilter",  "negative"=> negative,  "query"=> "#{field}:(#{value})"}
end

#fulltext(keywords, &block) ⇒ Object



10
11
12
# File 'lib/oss_active_record/search_request.rb', line 10

def fulltext(keywords, &block)
  @params['query'] = keywords
end

#order_by(field = nil, direction = :asc) ⇒ Object



39
40
41
42
# File 'lib/oss_active_record/search_request.rb', line 39

def order_by(field = nil, direction = :asc)
  index_field = field == :score ? 'score' :@index_instance.find_sortable_name(field)
  @order_by[index_field] = direction.to_s.upcase unless index_field.nil?
end

#paginate(params) ⇒ Object



32
33
34
35
36
37
# File 'lib/oss_active_record/search_request.rb', line 32

def paginate(params)
  rows = params[:per_page].to_i
  page = params[:page].to_i
  @params['start'] = (page - 1) * rows
  @params['rows'] = rows
end

#returns(fields) ⇒ Object



28
29
30
# File 'lib/oss_active_record/search_request.rb', line 28

def returns(fields)
  @params['returnedFields'] = fields.uniq
end

#with(field, value) ⇒ Object



18
19
20
21
# File 'lib/oss_active_record/search_request.rb', line 18

def with(field, value)
  index_field = @index_instance.find_field_name(field)
  filter index_field, value, false unless index_field.nil?
end

#without(field, value) ⇒ Object



23
24
25
26
# File 'lib/oss_active_record/search_request.rb', line 23

def without(field, value)
  index_field = @index_instance.find_field_name(field)
  filter index_field, value, true unless index_field.nil?
end