Class: ElasticSearch::SearchRequest

Inherits:
Request
  • Object
show all
Defined in:
lib/jruby-elasticsearch/searchrequest.rb

Instance Method Summary collapse

Methods inherited from Request

#on, #use_callback

Constructor Details

#initialize(client) ⇒ SearchRequest

Returns a new instance of SearchRequest.



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 14

def initialize(client)
  @client = client
  begin
    @prep = org.elasticsearch.client.action.search.SearchRequestBuilder.new(@client)
  rescue NameError
    # The 'client' namespace was removed in elasticsearch 0.19.0
    @prep = org.elasticsearch.action.search.SearchRequestBuilder.new(@client)
  end
  @indeces = []
  super()
end

Instance Method Details

#execute(&block) ⇒ Object



45
46
47
48
49
50
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 45

def execute(&block)
  use_callback(&block) if block_given?
  @prep.setIndices(@indeces.to_java(:String))
  action = @prep.execute(@handler)
  return action
end

#execute!Object



55
56
57
58
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 55

def execute!
  @prep.setIndices(@indeces.to_java(:String))
  return @prep.execute.actionGet()
end

#from(from) ⇒ Object Also known as: offset



130
131
132
133
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 130

def from(from)
  @prep.setFrom(from)
  return self
end

#histogram(field, interval, name = nil) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 95

def histogram(field, interval, name=nil)
  if name.nil?
    # TODO(sissel): How do we expose the name of the histogram?
    name = "#{field}_#{interval}"
  end
  # TODO(sissel): Support 'global' ?
  builder = org.elasticsearch.search.facet.histogram.HistogramFacetBuilder.new(name)
  builder.field(field)
  builder.interval(interval)
  @prep.addFacet(builder)
  return self
end

#index(index_name) ⇒ Object



33
34
35
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 33

def index(index_name)
  @indeces << index_name
end

#query(query_string, default_operator = :and) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 75

def query(query_string, default_operator=:and)
  # TODO(sissel): allow doing other queries and such.
  qbuilder = QueryStringQueryBuilder.new(query_string)

  operator = QueryStringQueryBuilder::Operator
  case default_operator
    when :and
      qbuilder.defaultOperator(operator::AND)
    when :or
      qbuilder.defaultOperator(operator::OR)
    else
      raise "Unknown default operator '#{default_operator.inspect}'"
  end

  @prep.setQuery(qbuilder)
  return self
end

#size(s) ⇒ Object Also known as: count, limit



122
123
124
125
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 122

def size(s)
  @prep.setSize(s)
  return self
end

#sort(field, order) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 61

def sort(field, order)
  case order
    when :asc
      order_val = org.elasticsearch.search.sort.SortOrder::ASC
    when :desc
      order_val = org.elasticsearch.search.sort.SortOrder::DESC
    else
      raise "Invalid sort order '#{order.inspect}'"
  end
  @prep.addSort(field, order_val)
  return self
end

#terms(field, name = nil) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 109

def terms(field, name=nil)
  if name.nil?
    # TODO(sissel): How do we expose the name of the histogram?
    name = field
  end
  # TODO(sissel): Support 'global' ?
  builder = org.elasticsearch.search.facet.terms.TermsFacetBuilder.new(name)
  builder.field(field)
  @prep.addFacet(builder)
  return self
end

#with(&block) ⇒ Object



27
28
29
30
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 27

def with(&block)
  instance_eval(&block)
  return self
end