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
25
# File 'lib/jruby-elasticsearch/searchrequest.rb', line 14

def initialize(client)
  @client = client
  # Try the 0.19 API
  begin
    @prep = org.elasticsearch.action.search.SearchRequestBuilder.new(@client)
  rescue NameError
    # Okay so maybe the pre-0.19 API works?
    @prep = org.elasticsearch.client.action.search.SearchRequestBuilder.new(@client)
  end
  @indeces = []
  super()
end

Instance Method Details

#execute(&block) ⇒ Object



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

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

#execute!Object



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

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

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



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

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

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



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

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



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

def index(index_name)
  @indeces << index_name
end

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



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

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



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

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

#sort(field, order) ⇒ Object



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

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



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

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



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

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